我不知道Codeigniter中会话的实际错误是什么。我的另一个项目很好地使用了这段代码。但在这种情况下,我遇到了问题。
对于登录会话,我的代码是:
$data = array(
'username' => $this->input->post('username'),
'admin_logged_in' => true,
'logged_in' =>true
);
$this->session->set_userdata($data);
我将会话检查为:
if ($this->session->userdata('admin_logged_in') == true) {
// code
}
在进入控制器之前,我会像上面一样检查会话,如果会话不正确,则重定向到登录页面。
注销:
function logout() {
if ($this->session->userdata('admin_logged_in') == TRUE) {
$useremail = $this->session->userdata('username');
$data = array(
'username' => $useremail,
'admin_logged_in' => true,
'logged_in' =>true
);
$this->session->unset_userdata($data);
$this->session->sess_destroy();
redirect('login');
}
}
但是上面的代码不适合我。当我注销时,页面被成功地重定向到注销页面,但是会话没有被破坏,因为我可以访问需要会话设置的所有页面。请帮帮我。
我有一个奇怪的问题。当我登录系统并注销时。并尝试访问需要会话的方法。如果我写的方法名没有索引,我就可以访问。php。若我用索引写方法名,我就无法访问需要会话的方法。php。示例:BnW需要设置会话才能继续。如果我登录并注销,如果我在borwser URL中写入以下内容:
example.com/index.php/bnw //it redirects to login page.
example.com/bnw //it logs in directly.
索引。php
来自。htaccess给会话带来问题
我认为在您的logout()
函数中,它不会进入if
块,因此会话根本不会被破坏
在文件中说
注意:如果您试图访问的项目不存在,函数将返回FALSE(布尔值)。
它并没有说它返回真值
所以改变吧
if ($this->session->userdata('admin_logged_in') == TRUE)
到
if ($this->session->userdata('admin_logged_in') != FALSE)
并检查会话在sess\u destroy()之后是否真的被销毁
$this->session->sess_destroy();
$admin_logged_in = $this->session->userdata('admin_logged_in');
echo "-----------------> $admin_logged_in";
在config/autoload中。php
$autoload['libraries'] = array('session');
您的. htaccess应该是(应该放在应用程序文件夹之外)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
在config/config中。php
if 2.0(第247行)
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = FALSE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 0;
如果3.0(第358行)
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 0;
$config['sess_regenerate_destroy'] = FALSE;
内部控制器
function logout()
{
$result = $this->model_name->check_login();
if ( $result == TRUE )
{
if(!empty($log))
{
$this->session->sess_destroy();
$this->index();//your logging should be here
}
else
{
//some code here
}
}
else
{
$this->index();
}
}
模型中
public function check_login()
{
$log = $this->session->all_userdata();
if (isset($log['admin_logged_in']))
{
if($log['admin_logged_in'] == true)
{
return true;
}
else
{
return false;
}
} else
{
return false;
}
}
每个控制器检查会话是否已设置。如果设置了加载视图,则直接使用索引函数。所以这将阻止用户通过URL直接访问
用于检查登录的示例代码
$result = $this->model_name->check_login();
if($result==true)
{
//load your views as usual
}
else
{
//load index function
$this->index();
}
索引功能(在控制器中)
public function index()
{
$this->load->view('admin/logging');//load your loginf view here
}
把这个放到你的注销功能中,
它对我有用
$user_data = $this->session->all_userdata();
foreach ($user_data as $key => $value) {
if ($key != 'session_id' && $key != 'ip_address' && $key != 'user_agent' && $key != 'last_activity') {
$this->session->unset_userdata($key);
}
}
$this->session->sess_destroy();
我正在使用CodeIgniter3.0。6.目前正在一页网站上工作,该网站具有搜索功能。我在codeigniter的配置文件中启用了csrf_保护选项,并使用form_open()函数创建表单。 当我按下submit按钮时,搜索功能运行良好,但在提交表单后,当我刷新页面时(使用任何刷新页面的功能,如从keybord或浏览器刷新),CSRF不工作,并显示错误“您请求的操作不允许”。 注意:我使用po
我已经在Codeigniter上编写了一个简单的身份验证过程,但存在一个问题。 由于某些原因,当用户浏览站点时,会话会被混淆,并模拟另一个随机用户。 我只是做: 我通过
这里的问题是我试图通过ajax登录到我的系统。让我给你的第一个解释一下。 当我的用户输入他的登录详细信息时,它将通过Ajax请求发送到服务器,然后在验证后,我创建一个会话条目,并保存用户ID和登录标志等信息。 然后我通过Json将这些值返回给用户,由一段javascript处理,并将用户重定向到仪表板。 如果用户未经身份验证,则显示错误。 但现在这里发生的是。当我创建会话变量时以及当用户重定向到仪
我正在使用CodeIgniter和RestServer实现构建一个APIhttps://github.com/chriskacerguis/codeigniter-restserver 我想使用会话身份验证模式,所以我在配置/rest.php中设置了这个: 在config/config中。php: 我有一个控制器身份验证,其代码如下: 会话存储在数据库中,并包含来自$user的数据。pr回显数据(
一旦我们开始使用这个,Vaadin就会崩溃并停止工作。当为了调试而用内存中的映射替换外部缓存时,它会再次工作。 这似乎是由引起的,因为它将存储为会话属性。是,Javadoc显示: VaadinSession中的所有内容都应该是可序列化的,以确保与使用序列化持久化会话数据的方案兼容。 注意:我们也有一个使用Vaadin8的应用程序版本,这里也发生了同样的事情。这个问题似乎是由Vaadin Sprin
我正在使用codeigniter。我有个奇怪的问题。我在用户登录时设置会话,并将其重定向到新页面。我观察到,会话有时设置,有时不设置。我尝试过使用codeigniter会话 以下是配置文件的外观: