2

我正在使用代码点火器。我对会话有一个奇怪的问题。当用户登录并将他重定向到新页面时,我设置了会话。我观察到会话有时已设置,有时未设置。我尝试使用带有 sess_use_database 变量 TRUE 和 FALSE 的 codeigniter 会话和本机会话。我不知道发生了什么。

这是配置文件的样子:

$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;
4

5 回答 5

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;

我更喜欢将会话保存在数据库中,因为它更安全并且可以正常工作。

于 2012-05-17T09:03:29.580 回答
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个目录是可写的,我强烈建议您启用数据库会话,它更安全,并且可以通过检查会话表来帮助您找出真正的问题。祝你好运 :)

于 2013-06-23T00:53:55.940 回答
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 名称都没有下划线。IE:

$config['sess_cookie_name'] = 'mycookie';   // good
$config['sess_cookie_name'] = 'my_cookie';   // bad
于 2012-04-11T00:07:01.053 回答
0

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

我在会话和重定向方面遇到了同样的问题,我已经破解了我的 cms 以找出导致这种情况的原因。在 config.php 中设置它对我有用。

于 2015-03-13T16:31:01.750 回答
0

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

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

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

    $config['sess_encrypt_cookie']  = FALSE;

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

于 2013-06-16T09:29:02.593 回答