在同一个函数中销毁和创建会话

时间:2014-04-09 16:12:45

标签: php codeigniter

在我的注销功能中,我想销毁除一个以外的所有会话 这是我的功能:

    public function out(){

    $ref = $this->session->userdata('ref'); 
    var_dump($ref);

    $this->session->sess_destroy();

    $this->session->set_userdata('ref', $ref ); 


    $ref = $this->session->userdata('ref'); 
    echo '---------------------------------------<br />';
    var_dump($ref);


    }

但这不起作用,甚至会破坏所有会话ref,当我在下一页检查ref时,我会null

在函数页面中我得到了这个输出:

array (size=2)
  'val' => int 666
  'date' => int 1397060477

---------------------------------------

array (size=2)
  'val' => int 666
  'date' => int 1397060477

A PHP Error was encountered

Severity: Notice

Message: Undefined index: last_activity

Filename: drivers/Session_cookie.php

Line Number: 590

Backtrace:

A PHP Error was encountered

Severity: Notice

Message: Undefined index: session_id

Filename: drivers/Session_cookie.php

Line Number: 611

Backtrace: 

即时通讯使用3.0-dev

4 个答案:

答案 0 :(得分:3)

试试这个:

public function out(){

    $ref = $this->session->userdata('ref'); 
    $this->session->sess_destroy(); // this kills the ID/cookie

    $this->session->sess_create(); // properly start a new session with new ID/cookie

    if($ref)        
    $this->session->set_userdata('ref', $ref ); 

     redirect(base_url().'index');  

}

注意:

此处未记录

sess_create()CodeIgniter Sessions

您必须查看/system/libraries/Session.php才能找到sess_create()

<强>更新

使用Dev 3.0时,您需要这样做:

$this->session->__construct();

答案 1 :(得分:0)

thanx伙计们,我已经通过在破坏它之后在函数中加载会话来解决它...即使我自动加载sess lib!

我猜他们永远不会解决sess lib问题!

public function out(){

$ref = $this->session->userdata('ref'); 
$this->session->sess_destroy();

$this->load->library('session');
$this->session->set_userdata('ref', $ref ); 

 redirect(base_url().'index');  

}

答案 2 :(得分:-1)

会话被破坏但在销毁后没有重新创建。也许你的会话类应该在构造函数中有一个session_start

答案 3 :(得分:-1)

在你破坏一个会话之后,我相信这就是这一行:

$this->session->sess_destroy();

你根本没有会话,所以你不能把任何东西都拿来。

首先将会话变量存储在变量$ ref中,然后销毁整个会话,并再次尝试将某些内容放入会话中。所以在毁灭之后,你必须开始另一场会议。像这样:

public function out(){

$ref = $this->session->userdata('ref'); 
$this->session->sess_destroy();
session_start(); // put ur session_start func here
if($ref)        
$this->session->set_userdata('ref', $ref ); 

 redirect(base_url().'index');  

}