ahm*_*med 24 php authentication cookies session codeigniter
在Codeigniter我正在为我的网站构建一个身份验证系统,并实现我使用会话库
session->set_userdata('username')
Run Code Online (Sandbox Code Playgroud)
这将节省会话 - 我相信 - 一段时间
我想在登录表单中提供一个"记住我"复选框,以便用户可以永久保存会话 - 找不到永远保存会话的方法!?
注意: $ sess_expiration不起作用,因为它为所有用户设置了截止日期,我想要做的是根据他的偏好设置截止日期
那可能吗?怎么做?
谢谢
Mis*_*cha 62
如果选中"记住我"复选框,则使用随机字符串在用户的系统上设置cookie.例如:
$cookie = array(
'name' => 'remember_me_token',
'value' => 'Random string',
'expire' => '1209600', // Two weeks
'domain' => '.your_domain.com',
'path' => '/'
);
set_cookie($cookie);
Run Code Online (Sandbox Code Playgroud)
您还可以在users
表中保存此随机字符串,例如在列中remember_me_token
.
现在,当用户(尚未登录)尝试访问需要身份验证的页面时:
remember_me
他的系统上的令牌名称是否有cookie如果未满足上述要求之一,则将其重定向到登录页面.
出于安全原因,您可能希望remember_me_token
每次用户登录时都更新随机.您还可以在每次用户登录时更新cookie的到期日期.这样他就会保持登录状态.
为您编写所有代码是太多的工作,但我希望这有助于您自己实现此功能.如果您有任何疑问,请发表评论.祝好运.
我需要同样的东西.您无法使用CI设置完成此操作,因此我选择覆盖CI Session类的setcookie方法(在MY_Session中):
function _set_cookie($cookie_data = NULL)
{
if (is_null($cookie_data))
{
$cookie_data = $this->userdata;
}
// Serialize the userdata for the cookie
$cookie_data = $this->_serialize($cookie_data);
if ($this->sess_encrypt_cookie == TRUE)
{
$cookie_data = $this->CI->encrypt->encode($cookie_data);
}
else
{
// if encryption is not used, we provide an md5 hash to prevent userside tampering
$cookie_data = $cookie_data.md5($cookie_data.$this->encryption_key);
}
setcookie(
$this->sess_cookie_name,
$cookie_data,
$this->userdata('rememberme') == true ? $this->sess_expiration + time() : 0,
$this->cookie_path,
$this->cookie_domain,
0
);
}
Run Code Online (Sandbox Code Playgroud)
当然,您需要根据用户的选择在会话中设置rememberme标志.
归档时间: |
|
查看次数: |
38965 次 |
最近记录: |