【发布时间】:2018-08-08 14:18:35
【问题描述】:
我有一个 codeigniter 应用程序。我的目标是对用户进行身份验证,并将他们的名字保存到会话变量中。
我使用 fetch 从页面发出发布请求:
await fetch('/api/auth/', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
Username: args['userName'],
Password: args['password']
})
})
它进入我的 api 并最终形成一个模型,在该模型中经过身份验证并保存到会话中:
$this->load->library('session');
$_SESSION['userdata'] = array(
'username' => $user,
'testme' => 'test'
);
然后在我的页面控制器中,我尝试检索数据并查看它们是否已验证:
defined('BASEPATH') OR exit('No direct script access allowed');
class TimeClock extends CI_Controller {
public function index()
{
$this->load->library('session');
//$userdata = $this->session->set_userdata(array('test' => 'success'));
$userdata = $_SESSION;
var_dump($userdata);
...
这里有一些相关的配置内容:
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'timeclock_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] =APPPATH . '/timeclock_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
$config['cookie_prefix'] = '';
$config['cookie_domain'] = '';
$config['cookie_path'] = '/';
$config['cookie_secure'] = FALSE;
$config['cookie_httponly'] = FALSE;
我正在使用 php 7.0 和 codeigniter 3.1.7
我遇到的问题是,当我加载页面时,模型中的会话数据集不存在。但是,如果我在控制器中设置会话数据,只是一些虚拟数据,它会在那里,即使在页面刷新之后。
查看实际的会话文件,我可以看到创建了两个,比如说会话 A 和 B。
会话 A 是空的(除了 CI 创建的 _ci_last_regenerate 属性),会话 B 有我的数据(用户名和 testme 属性)。查看我的浏览器应用程序/cookie 数据,我可以看到会话 A 正在加载仅。
所以不知何故,post 请求与我的页面加载使用的会话完全不同。
我使用了 codeigniters 会话库来设置会话而不是 $_SESSION 全局,它给出了与上面完全相同的结果,我切换到使用 $_SESSION 因为我阅读了 $this->session- >set_userdata() 被贬低了。
编辑
我认为我需要付出额外的努力并用一些图片来说明真正的问题:
加载页面(我在其中检查会话数据)创建一个会话,并发出第二个请求,这里是会话:
第一个内容:
__ci_last_regenerate|i:1519850738;
第二个的内容:
__ci_last_regenerate|i:1519850762;test|s:7:"成功";
有数据,在第二个。
这是浏览器正在加载的内容。那个空的。这种情况始终如一地发生,如果我编辑该值以匹配另一个会话,那么它会加载我的数据。 所以更多的是分配会话 ID 然后实际保存会话的问题。
【问题讨论】:
-
当我需要使用 codeigniter 时回来了,我记得关注了这个网站:codeigniter.com/userguide2/libraries/sessions.html。它对我来说非常有效,抱歉我无法提供一个多年未使用过 codeigniter 的示例,而且我不打算再次弄清楚它......
-
是的,这在我最后一点中提到过,我尝试使用会话库,结果是一样的。我相信会话库现在使用本机会话,所以两者都差不多。感谢您的尝试。
-
codeigniter 3.1.7 已解决所有会话问题@mrdeadsven 他不是在谈论 ci 2。我最近遇到了这个问题(对我来说,这个问题已本地化为某些 android 中的 Chrome 浏览器仅限手机),当移动到不同的产品服务器时,它无法在相同的手机上复制,并且在 localhost 上也无法复制。仅当有 ajax 请求时,该问题才会普遍存在。从未找到适合该特定环境的解决方案,但它在某种程度上是与服务器相关的问题。
标签: php codeigniter session