2012-07-10 99 views
1

我一直在尝试使用Codeigniter进行会话,每次刷新浏览器时都会发现新的会话被创建......这没有任何意义。我尝试删除所有会话,然后我得到一个新的,有没有人看到这个错误?如何避免在codeigniter中创建自动会话?

这是我的代码:

$this->load->library('session'); 
print_r ($this->session->all_userdata()); 
$this->session->sess_destroy(); 

所以,用sess_destroy我删除了会议,但是当我刷新一个新的会话来现场..

+0

如果回显session_id()它是否每次重新加载都返回相同的ID或不同的ID? – maxhud 2012-07-10 16:37:07

+0

每次都有一个不同的id ...比如,如果每次刷新浏览器时都会创建一个新的 – jpganz18 2012-07-10 16:37:52

回答

2

快速峰值后,确认你描述的是一个默认的和正常的行为。请教“会话如何工作?” CodeIgniter用户指南“的Session Class章节中。它说:

如果会话数据不存在(或者已经过期)一个新的会话将被创建并保存在cookie中。

这提供了会话类已使用

$this->load->library('session'); 

究竟是什么这里的情况之前开始。

如果您关心安全性,请不要担心。新会议不会继续上届会议的数据。

最后,如果由于某种原因,你想摧毁了会议,并有条件地启动它,检查它是否有存在:

if($this->session->userdata('username') === FALSE) 

按照手册中的规定:

注意:如果您尝试访问的项目不存在,该函数返回FALSE(布尔值)。

+0

你是对的!但我在我的配置文件中发现了问题,出于某种原因,如果我将sess_encrypt_cookie设置为false,则会话不起作用。 – jpganz18 2012-07-10 22:08:17

2

嗯,很肯定sess_destroy摧毁旧会话,所以当然你会刷新一个新的!

编辑:

在session.php文件

/** 
* Destroy the current session 
* 
* @access public 
* @return void 
*/ 
function sess_destroy() 
+0

也就是说,只需从代码中除去'$ this-> session-> sess_destroy();',除非有特定的原因你需要在某个时候对它进行核武器攻击。 – quickshiftin 2012-07-10 19:00:16

+0

那么,我删除了sess_destroy ...但仍...我没有用户名的会话...是正常的?我得到像这样Array([session_id] => 0cc6979e239bd106afb00be2743a6604 [ip_address] => 127.0.0.1 [user_agent] => Mozilla/5.0(Windows NT 6.1; rv:13.0)Gecko/20100101 Firefox/13.0.1 FirePHP/0.7。 1 [last_activity] => 1341947927 [user_data] =>) – jpganz18 2012-07-10 19:20:24

+0

您必须将用户名放在那里,默认情况下不存在。 $ _SESSION ['username'] ='bob'; – quickshiftin 2012-07-10 19:21:44