【问题标题】:php session recreated in each ajax call在每个 ajax 调用中重新创建 php 会话
【发布时间】:2013-12-05 18:40:29
【问题描述】:

我正在尝试使用 JqueryMobile 编写一个移动 Web 应用程序,移动设备将是我的客户端,我还有一个 php 服务来管理登录会话,但是 php 在每个 ajax 调用中创建一个新会话,我看到在我的会话文件路径中生成会话文件,我需要恢复 php 会话。

php 文件如下所示:

header("Content-type: text/html; charset=utf-8");
header("Access-Control-Allow-Origin: *");

require 'connect_to_db.php';

// Starting the session
session_name('MySessionName');

// Making the cookie live for 2 weeks
session_set_cookie_params(2*7*24*60*60);

session_start();
...
// checking if loged in ...
?>

和 ajax 请求:

$.ajax({
    url: baseUrl + "login.php",
    crossDomain: true,
    type: "POST",
    data:{
        command: "Login",
        username: $("#username").val(),
        password: $("#password").val()
    },
    dataType: "json",
    success: function(response)
    {
        $.mobile.changePage("#DataList");
    },
});

我从 stackoverflow 检查了许多页面,但没有成功。 我正在 Firefox 和 xampp 中测试我的应用程序。

【问题讨论】:

  • 您可能需要添加代码来检查您是否已登录到您的示例,因为问题可能比您显示的更远
  • 或者检查您的 connect_to_db.php 脚本是否也不包含 session_start
  • 不,我的 connect_to_db.php 中没有 session_start。

标签: php ajax session jquery-mobile cross-domain


【解决方案1】:

使用浏览器的开发工具检查请求的请求/响应标头。响应标头应包含以下内容:

Set-Cookie: MySessionName=abcdef12345; expires=Wed, 21-May-2014 10:46:20 GMT; path=/; HttpOnly

第一次请求后,下一次请求需要将cookie发回。

Cookie: MySessionName=abcdef12345

浏览器可能不接受 cookie(生命周期、3party、p3p 策略……)。如果是这种情况并且它没有发回会话 id,PHP 无法识别它并会创建一个新的。

【讨论】:

  • Thanx Thomas,我的第二个 ajax 中没有 Cookie,即使添加了 xhrFields: { withCredentials: true },
  • 所以问题似乎出在 cookie 选项中。我建议直接在浏览器(自己的选项卡或窗口)中打开 ajax 请求。如果直接请求也发生同样的情况,那是 cookie 选项(域、路径、生命周期...)中的某些内容。
猜你喜欢
  • 2014-04-25
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
相关资源
最近更新 更多