Codeigniter会话问题

时间:2012-04-10 23:34:57

标签: codeigniter session

我正在使用codeigniter。我对会话有一个奇怪的问题。我在用户登录时设置会话并将其重定向到新页面。我观察到有时会设置会话,有时它们没有设置。我尝试过使用codeigniter session&具有sess_use_database变量的本机会话TRUE和FALSE。我不知道发生了什么。

这是配置文件的样子:

$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 7200;

5 个答案:

答案 0 :(得分:2)

当会话数据在数据库中可用时,每次在用户的cookie中找到有效会话时,都会执行数据库查询以匹配它。如果会话ID不匹配,则会话被销毁。会话ID永远不会更新,只能在创建新会话时生成。

为了存储会话,您必须首先为此目的创建数据库表。

在您的数据库中创建它:

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(120) NOT NULL,
    last_activity int(10) unsigned DEFAULT 0 NOT NULL,
    user_data text NOT NULL,
    PRIMARY KEY (session_id),
    KEY `last_activity_idx` (`last_activity`)
);

何时,转到配置并更改:

$config['sess_use_database']    = TRUE;

我更喜欢将会话保存在数据库中,因为它更安全且无问题。

答案 1 :(得分:0)

你的sess_cookie设置在哪里?我在那里看不到它?

$config['sess_cookie_name']     = 'cookiename';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 7200;

确保您选择的任何Cookie名称没有下划线。即:

$config['sess_cookie_name'] = 'mycookie';   // good
$config['sess_cookie_name'] = 'my_cookie';   // bad

答案 2 :(得分:0)

有同样的问题,我发现它有什么

    $config['sess_encrypt_cookie']  = TRUE;
    $config['sess_use_database']    = TRUE;

将在会话表中插入2条记录,第一条记录包含数据,第二条记录则没有,因此会话数据无法访问。当你改变

    $config['sess_encrypt_cookie']  = FALSE;

为false它只会将一条记录插入到包含所有数据的会话表中,并且所有数据都将与世界对齐:)

答案 3 :(得分:0)

我认为它不是按照假设进行更新,而是在每个页面请求上创建一个新的。 (常见的Codeigniter设置问题)

这是我的建议:

仔细检查您的Application / Config / config.php文件,以确保如果您在主目录中托管该站点,会话域的部分就是这样:

$config['cookie_prefix']    = "";
$config['cookie_domain']    = "yourdomain.com";
$config['cookie_path']  = "var/sessions/";
$config['cookie_secure']    = FALSE;

并且如果您将站点托管在子目录中,那就像这样:

$config['cookie_prefix']    = "";
$config['cookie_domain']    = "yourdomain.com";
$config['cookie_path']  = "siteSubDirectory/var/sessions/";
$config['cookie_secure']    = FALSE;

并确保通过将其权限修复为755左右来确保2个目录是可写的,我强烈建议您启用数据库会话,它更安全,并通过检查会话表帮助您找出真正的问题。祝你好运:)

答案 4 :(得分:0)

尝试$config['sess_match_useragent'] = FALSE;

我遇到了与会话和重定向相同的问题,并且我已经攻击了我的cms以找出造成这种情况的原因。设置在config.php中为我工作。