基于ajax的PHP会话

基于ajax的PHP会话,php,ajax,session,Php,Ajax,Session,我已经为我的ios应用程序构建了一个php后端库,我正在使用会话来了解用户是否登录。但出于某种原因,即使在设置了会话变量之后,当我尝试检索它时,它被检索为未定义,这使得我的应用程序认为用户未登录,即使用户已登录。使用会话是否有其他选择,或者会话设置是否错误?代码如下: 登录呼叫: session_start(); // Login stuff $_SESSION["id"] = /* My id, which isn't undefined */; 检查用户是否已登录: session_sta

我已经为我的ios应用程序构建了一个php后端库,我正在使用会话来了解用户是否登录。但出于某种原因,即使在设置了会话变量之后,当我尝试检索它时,它被检索为未定义,这使得我的应用程序认为用户未登录,即使用户已登录。使用会话是否有其他选择,或者会话设置是否错误?代码如下:

登录呼叫:

session_start();
// Login stuff
$_SESSION["id"] = /* My id, which isn't undefined */;
检查用户是否已登录:

session_start();
if (isset($_SESSION["id"])) {
    $id = isset($_SESSION["id"]);
    echo $id;
    // do stuff
}
else {
    echo "You are not logged in.";
    // user not logged in
    // This condition is always called, and I am not able to change it no matter what I do.
}

编辑:此答案指的是最初发布的代码,此后由OP编辑

if($id=$\u会话[“id”]){

应该是

if($id=$\u会话[“id”]){

i、 e.
=
不是
=

单个equals将设置左侧变量的值,并且假设实际设置了
$\u SESSION[“id”]
,结果将始终计算为
true
。如果
$\u SESSION[“id”]
为null或未设置,则表达式将始终计算为
false

双等于比较这两个变量

然而,更为传统的解决方案是:

if (isset($_SESSION["id"])) {

编辑:此答案指的是最初发布的代码,此后由OP编辑

if($id=$\u会话[“id”]){

应该是

if($id=$\u会话[“id”]){

i、 e.
=
不是
=

单个equals将设置左侧变量的值,并且假设实际设置了
$\u SESSION[“id”]
,结果将始终计算为
true
。如果
$\u SESSION[“id”]
为null或未设置,则表达式将始终计算为
false

双等于比较这两个变量

然而,更为传统的解决方案是:

if (isset($_SESSION["id"])) {

Ajax请求不会自己保存会话cookie,您可能需要使用JWT令牌


看看这个

Ajax请求不会自己保存会话cookie,您可能需要使用JWT令牌

看看这个

只要做

// On the first page
session_start(); // Login stuff
$user_id = 2; //or something from the database or via authentication.
 $_SESSION["id"] = $user_id;   /* My id, which isn't undefined */;
在目标页面上

   session_start();
    if(isset($_SESSION["id"])){ 
    $id = $_SESSION["id"];
    echo " session id is set do your processing here.";
    }else{
      echo "session id is not set";
    }
照办

// On the first page
session_start(); // Login stuff
$user_id = 2; //or something from the database or via authentication.
 $_SESSION["id"] = $user_id;   /* My id, which isn't undefined */;
在目标页面上

   session_start();
    if(isset($_SESSION["id"])){ 
    $id = $_SESSION["id"];
    echo " session id is set do your processing here.";
    }else{
      echo "session id is not set";
    }



我最终不依赖cookie或令牌,而是使用数据库。用户在半小时后注销。我在mysql中修改了我的users表,并添加了两个新列,
loggedIn
作为
boolean
,以及
lastLoggedIn
作为
时间戳。从那里,我检查了是否在登录后半小时n、 如果是,请将loggedIn更改为false,否则,用户已登录。

我最终不依赖cookie或令牌并使用数据库。用户在半小时后注销。我在mysql中修改了我的users表,并添加了两个新列,
loggedIn
作为
布尔值,而
lastLoggedIn
作为
时间段mp
。从那里,我检查了登录后是否有半小时的时间,如果是,请将loggedIn更改为false,否则,用户已登录。

您的应用程序是否正确发送会话cookie?我的应用程序没有发送任何与会话相关的信息,它只发送用户登录信息您如何调用脚本url应该是rrelative..你的应用程序是否正确发送会话cookie?我的应用程序不发送任何与会话相关的信息,它只发送用户登录信息你如何调用脚本url应该是相对的..我是故意使用一个=的,我在if语句中将变量id分配给该值如果你分配变量,则您没有比较变量,因此无法在该上下文中使用if语句。@KingCoder11
if($id=$\u SESSION[“id”]){
将始终解析为TRUEOk,我将代码更改为
if(isset($\u SESSION[“id”]))
我刚刚用更新的代码运行了应用程序,@RiggsFolly,你是对的,我之所以认为不是,是因为我有多个会话变量,它们具有相同的else语句,使用不同的if。我的意思是故意使用一个=,我将变量id分配给if语句中的该值。如果您分配变量,则您没有比较变量,因此不能在该上下文中使用if语句。@KingCoder11
if($id=$\u SESSION[“id”]){
将始终解析为TRUEOk,我将代码更改为
if(isset($\u SESSION[“id”]))
我刚刚用更新后的代码运行了这个应用程序,@RiggsFolly,你是对的,我之所以认为不是,是因为我有多个会话变量,它们有相同的else语句,使用不同的if。谁提到过ajax?客户端是一个iOS应用程序。但是是的,令牌是一个很好的安全解决方案。标题,我的不好。但是我需要一些可以同样适用于ajax。@KingCoder11会话和令牌与ajax或传统HTTP请求相比同样适用。我不知道iOS,但我认为它与Android类似,它们都使用ajax请求,JWT访问令牌是最好的方式。就像Facebook、Google、,etc@ADyson,那样的话,也许我应该用我的数据库来做,我可以设置登录时间,并根据该时间进行检查。谁提到过ajax?客户端是一个iOS应用程序。但是,是的,令牌是一个很好的安全解决方案。标题,我的不好。但是我需要一些同样适用于ajax的东西。@KingCoder11会话和令牌在ajax或传统HTTP请求上都同样有效。我不知道iOS,但我知道就像Android一样,他们都使用ajax请求,JWT访问令牌是最好的方式。就像Facebook,谷歌,etc@ADyson,在这种情况下,也许我应该使用我的数据库来做这件事,我可以设置登录的时间,并基于此进行检查。这将转到else语句。我不理解您的注释else语句正在执行,在您的例如,代码段正在执行“会话id未设置”,然后未设置$\u会话['id']。。您必须通过执行