PHP session 通过 jquery ajax 丢失?

标签 php jquery ajax session

我们的一位客户目前遇到了麻烦。我们的系统在登录后使用 AJAX 请求与服务器进行所有通信。无论在哪里使用 $_SESSION,session_start();位于脚本顶部 - 包含在 try...catch 中,因为自定义错误处理程序会在错误时引发异常。因此,伪代码如下所示:

//set_error_handler_here
try{
session_start();
//do_something_with $_SESSION
(...)
} catch($e){
//handle error
}

现在,问题是:我们的客户似乎随机丢失了 session ,我的意思是 f.e. $_SESSION['id'] 将抛出“未知索引”错误。 Internet Explorer 和 Chrome 都是这种情况。我们已经在不同的系统中测试了这个系统几个月,可以确认我们以前没有遇到过这个错误。

我们不使用suhosin。 session 到期之前的时间内也有事件。有谁知道解决方案是什么?

编辑:我最终进行了测试以查看是否设置了 $_COOKIE['PHPSESSID'] 。 isset($_COOKIE['PHPSESSID']) 返回 false。这意味着客户端可能受到某种形式的恶意软件的困扰,因为它发生在两种浏览器上。我要感谢所有尝试提供帮助的人,某些选项是我们没有想到的。

最佳答案

案例1
您正在验证 http 用户代理吗?

如果是这样,这可能是一个问题,因为 IE 在兼容模式和正常模式下运行时将使用不同的用户代理。

案例2

你们有集群应用服务器吗?因此可能会出现 session 文件存储在一台服务器中而下一个请求发送到另一台服务器的情况?

案例3

可能是应用程序级别的错误,其中 session 根据条件或用户或其他内容取消设置

案例4
如果您有 iframe,也有可能因为您在 iframe 中设置 cookie,浏览器可能会将其视为第三方 cookie 并拒绝它,除非在浏览器首选项中明确设置

在这种情况下,您需要在尝试设置 Cookie 的页面上添加 P3P header 。

我建议你设置一些虚拟cookie,看看它是否会回来。并且还将 session cookie设置为httpcookie这样就无法从 javascript 访问它(假设某些脚本畸形 cookie)。

关于PHP session 通过 jquery ajax 丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10722053/

相关文章:

PHP 错误 "parameter was not defined"

javascript - 使用 javascript/jquery 捕获搜索词

javascript - 根据点击 Bootstrap 更改文本

javascript - 根据页面滚动取消固定元素

javascript - 如何使用原型(prototype) js 库中止/取消请求?

jquery - 提交常规表单之前的 AJAX 请求

php - 在 PHP 中调用带有 OUT 参数的存储过程

php - 我怎样才能加快我的 cron 作业/数据库更新

php - laravel compact() 和 ->with()

javascript - Jquery 防止帖子上页面重新加载