所以问题是,如果它是可能的会话在PHP是自动启动时设置任何值,因为我读到,你需要调用session_start()
和在我目前的代码我不这样做,所以我不太确定,如果它真的有必要。关于我的环境的一些信息:XAMPP适用于Linux 5.6.8/Ubuntu 14我使用Codeigniter框架3.0.2和PHP版本5.6.8。是的,我检查了php.ini文件,我找不到任何会话。Start_auto在那里,所以我真的很困惑。
我的登录页面代码是这样的:
if ($this->login_model->authenticate($data))
{
#start session, save necessary data
$this->load->model('user_model');
$user = $this->user_model->get_user_by_email($data['email']);
$_SESSION['user_id'] = $user->user_id;
$_SESSION['user_email'] = $user->email;
$_SESSION['user_authenticated'] = TRUE;
$this->load->helper('url');
redirect('principal');
}
那么在每个页面中,我调用一个helper方法来检查用户是否以这种方式进行了身份验证:
public function user_is_authenticated()
{
if (!isset($_SESSION['user_authenticated']) || !$_SESSION['user_authenticated'] === TRUE)
{
redirect('login');
}
}
最后,我的注销页面这样做:
public function end_session()
{
if (session_destroy())
{
redirect('login');
}
}
事情是,它工作得很好,因为如果我不登录,我无法访问具有该验证方法的页面。所以,我从来没用过session_start()
。我应该吗?在哪里?
Thanks in advance
我应该吗?
。你不必使用session_start()
。
为什么?
Codeigniter使用set_userdata
方法设置Session
In Codeigniter.com
Sessions通常会在每次页面加载时全局运行,所以Session类应该在控制器构造函数中初始化,或者可以由系统自动加载。在大多数情况下,会话类将在后台无人值守地运行,因此简单地初始化类将使它在必要时读取、创建和更新会话。
有什么额外的事情要做吗??
是的。你必须在autoload.php
如何使用set_userdata
$newdata = array(
'user_id' => $user->user_id,
'user_email' => $user->email,
'user_authenticated' => TRUE
);
$this->session->set_userdata($newdata)
如何检查会话是否设置??
$user_id = $this->session->userdata('user_id');
if (isset($user_id)) {
echo $name;
}
else
{
echo "Not set";
}
有额外的资源吗??
- <
- 会话库/gh>
在codeigniter中不需要使用session_start()。只需在配置文件夹
中的autolload .php文件中自动加载会话库$autoload['libraries'] = array('session');
更多内容请阅读本教程
http://w3code.in/2015/10/session-handling-in-codeigniter/
或者您可以使用本机会话为本机会话读取此
http://w3code.in/2015/10/how-to-use-native-php-session-in-codeigniter/在codeigniter中,不需要使用session_start()
直接用
$this->session->set_userdata();// to set the session values.
和
$this->session->userdata();// to retreive the session values.
似乎会话正在使用缓存,你可以var转储sessionid @页面的顶部,并确保它返回空。此外,我会尝试在浏览器的隐身模式,以消除缓存
的模糊性var_dump (session_id())