我面临一个问题。我有一个页面,当用户登录时,我们在页面顶部有登录按钮。登录按钮更改为myaccount下拉列表并加载同一页面。
我在控制器中使用缓存来加载页面视图以提高速度。但问题是,当用户使用登录按钮登录页面时,是从缓存加载的,而不是从带有下拉菜单的页面加载的。
<?php if($this->session->userdata('user_id') != ''){?>
<ul class="nav nav-pills">
<li class="dropdown pull-right">
<ul class="dropdown-menu">
<li><a href="<?php echo base_url();?>account-details"><i class="icon-briefcase icon-black"></i> Wallet</a></li>
<li><a href="<?php echo $this->session->userdata('logout')?>"><i class="icon-off icon-black"></i> Logout</a></li>
</ul>
</li>
</ul>
<?php }else{?>
<a href="<?php echo base_url();?>login_page/1" class="btn">Login / Sign Up</a>
<?php
}?>
</div>
</div>
</div>
不要缓存特定于会话的内容。
弄清楚标头的哪些部分是缓慢的,并且是可缓存的。只缓存那些部分。你也可以使用JavaScript来做一些动态技巧,但它会变得非常复杂,非常快。
我认为你可以考虑这两个选项:
1.不要使用CI的通用缓存,而是使用类似的缓存库http://philsturgeon.co.uk/code/codeigniter-cache
2.破解CCD_ 1。在第265行(CI 1.7.2),它检查是否启用了缓存。更改该行,使其在会话表上为SELECT时不会执行此操作。