【问题标题】:Different session id between php pagesphp页面之间的不同会话ID
【发布时间】:2016-04-20 01:07:39
【问题描述】:

我想通过$SESSION 变量在页面之间共享一个变量。在 file1.php 我有

<?php session_start();
   require_once('connect.php');
   global $gb;
   $_SESSION['myvar'] = "somestring";
   // Some other code
?>

在我的第二个 fille2.php 中有

<?php session_start();
   require_once('connect.php');
   $myvar = $_SESSION['myvar'];
?>

$myvar 为空。我首先对file1.php 进行ajax 调用,然后对file2.php 进行调用。我试过回显session_id(),但它有所不同。这里有什么问题?

编辑:我正在从本地主机调用我的服务器端 PHP 脚本,并使用启用了 CORS 插件的 Chrome(如果这很重要)

【问题讨论】:

  • 两个文件是否在同一个服务器上,域完全相同?
  • @CharlotteDunois 是的。
  • 我认为你不需要在file2.php 中再次使用session_start();
  • @andre3wap 哦,是的,你这样做了
  • 这两个文件是否在同一个会话中运行??

标签: php ajax


【解决方案1】:

我不确定你的意思,但如果我理解正确的话,这两个文件都是由使用 AJAX 的 js 脚本调用的。如果您可以在进行调用的地方包含 js 代码,那将非常有帮助。无论如何,我很确定第二个文件是在第一个文件之前下载的。解决此问题的方法是在另一个文件或当前文件的顶部(例如在名为“session_init.php”的文件中)抽象 session_start()$_SESSION['myvar'] 变量声明。它应该如下所示:

session_init.php:

<?php

//init session and session variable
session_start(); 
/* $_SESSION['myvar'] = 'value'; */ 

您当前的文件(您发出 AJAX 请求的文件):

<?php

//include this folder on the top of the page where the ajax petition is made
require_once('session_init.php');
$_SESSION['myvar'] = 'Some Value';
?>

<script type="text/javascript">

  //js code to make ajax petitio to file 1

  $.ajax({

    //parameters and other stuff

    success : function(resp){

          //js code to make ajax petition to file 2
          $.ajax({

             //parameters and other stuff
          });
      }
  })
 </script>

现在$_SESSION['myvar'] 应该可以在两个文件中访问,只要您在每个文件的顶部声明session_start()。请记住,嵌套 AJAX 请求并不是一个好习惯。您还可以采用不同的方法通过文件发送数据,例如,将“myvar”的值作为 AJAX 请求的参数发送。

【讨论】:

  • 我认为 OP 不会希望在每个文件的开头将 $_SESSION['myvar'] 静态设置为 'value'。这违背了他做事的目的。操作和获取会话内容应该在每个文件的基础上完成;会话开始很好,但可以在该文件中。我已对您的帖子进行了建议的编辑(希望会被接受),以纠正此问题。
  • 是的,你是对的。我没有注意到他在 file1 上设置了 $_SESSION['myvar`] 的值,所以感谢您的编辑。无论如何,您可以在 'session_init.php' 上设置一个默认值,然后随时更改它。
  • 问题出在第二页上,原来的值会被默认值覆盖。
  • 是的,我想在添加评论后立即对其进行编辑,但我不能。还是谢谢。
【解决方案2】:

听起来您没有从进行 AJAX 调用的文件中调用 session_start(),这将导致两个不同的会话。那,或者你在connect.php中的某处重新生成会话ID

如果这不能帮助您解决问题,请提供所有相关代码,以便我尝试重现它。

【讨论】:

  • 嘿!你的意思是我需要从进行 AJAX 调用的文件中调用 session_start() 。我需要从我的 JS 文件中调用它吗?
  • @novalain 来自执行 AJAX 的 PHP 文件,而不是 JS 文件。
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 2012-08-01
相关资源
最近更新 更多