我正在使用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;
答案 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中为我工作。