在CodeIgniter中恢复session_id

时间:2011-07-11 12:56:21

标签: php session codeigniter

我想销毁恢复会话ID,然后启动会话,这在标准PHP中完成,如下所示。我怎么能在CodeIgniter中做到这一点?

session_destroy();
session_id($old_session_id);
session_start();

我认为会话是通过自动加载库自动启动的:

$autoload['libraries'] = array('session');

是这样吗?如何在CodeIgniter中使用session_id($old_session_id);? 我正在尝试$this->session->set_userdata('session_id', $old_session_id);

但似乎有些东西不能正常工作,因为我无法获得会话数据。如果上述内容或其他内容出现任何问题,是否有任何想法? 感谢。

2 个答案:

答案 0 :(得分:1)

要检查的一些事项:

  1. 检查以确保会话在没有CodeIgniter的情况下在PHP中运行。如果会话不起作用,那么您的服务器无法正确保存会话信息

  2. 检查是否将会话信息保存到数据库(在application / config / config.php中,$ config ['sess_use_database']等于FALSE?如果为TRUE,则确保将此代码导入到你的数据库

  3. CREATE TABLE IF NOT EXISTS  `ci_sessions` (
        session_id varchar(40) DEFAULT '0' NOT NULL,
        ip_address varchar(16) DEFAULT '0' NOT NULL,
        user_agent varchar(50) NOT NULL,
        last_activity int(10) unsigned DEFAULT 0 NOT NULL,
        user_data text DEFAULT '' NOT NULL,
        PRIMARY KEY (session_id)
    );
    

    如果此处的内容不正确,则CI不会保存会话信息。

    1. 在工作控制器函数中使用此代码段尝试更多会话测试:
    2. $this->load->library('session'); // load session in controller
      echo $session_id = $this->session->userdata('session_id'); // print session id to page
      

      检查错误日志以查看CI是否正在加载会话库模块,并且不存在任何错误。

      这更像是会话的调试策略而不是解决方案。

答案 1 :(得分:1)

CodeIgniter中的会话与nativ PHP会话不同。实际上,它们根本就不是会话,因为它们实际上是编写的cookie(您也可以使用数据库来存储会话值,但它们仍然与php会话不同)。

从手册中引用: 什么是会话数据?

A session, as far as CodeIgniter is concerned, is simply an array containing the following information:

    The user's unique Session ID (this is a statistically random string with very strong entropy, hashed with MD5 for portability, and regenerated (by default) every five minutes)
    The user's IP Address
    The user's User Agent data (the first 50 characters of the browser data string)
    The "last activity" time stamp.

The above data is stored in a cookie as a serialized array with this prototype: [array] (
     'session_id'    => random hash,
     'ip_address'    => 'string - user IP address',
     'user_agent'    => 'string - user agent data',
     'last_activity' => timestamp )

每当您加载页面时,CI都会检查Cookie以查看是否存在会话。如果没有(或者你没有设置它,或者因为它已经过期),会话将被创建。如果它在那里,将由CI

自动生成

如果您想使用CI的本机会话,这就是方法。否则,您可以使用本机php(框架是高度灵活的),但你不能混合两者,因为它们在不同的级别上行动(在服务器上用于php,在客户端上用于CI的会话)