Ajax 和 PHP 会话

Posted

技术标签:

【中文标题】Ajax 和 PHP 会话【英文标题】:Ajax and PHP Sessions 【发布时间】:2014-11-24 05:13:22 【问题描述】:

我有一个基于模板的站点,该站点始终依赖于持久会话。最近我需要通过为数据库存储定义保存处理程序来扩展会话存储。这在框架内的类的一般范围内工作正常,但是当任何页面发出 ajax 请求时,会话 ID 会重新生成,并且如果表单被提交,则前一个会话消失了。

  <?php

 require_once('site-database.php');
 require_once('site-config.php');


 class FileSessionHandler

 


 private $database;

 private $life_time;


 public function FileSessionHandler()


 $this->life_time = get_cfg_var("session.gc_maxlifetime");

 $this->database = new database();

 $this->database->newConnection(db_host,db_user_name,db_user_pass,db_user_database);


 session_set_save_handler(
array(&$this,'open'),
array(&$this,'close'),
array(&$this,'read'),
array(&$this,'write'),
array(&$this,'destroy'),
array(&$this,'gc')
);

【问题讨论】:

你的脚本 - ouhtit ajax 请求单独的文件或嵌入到结构中,你可能忘记了 session_start() 从索引页面和ajax页面调用处理程序类。在每个页面上设置处理程序后调用 session_start。虽然会话没有保持持久性,并且每次调用 session_start 时都会重新生成 id,从而无法从 ajax 传递会话并在主类中保留它们。 你能告诉我你是如何处理会议的吗? require_once('site-sessions.php'); $handler = new FileSessionHandler(); register_shutdown_function('session_write_close'); session_start();这就是在框架和 ajax 中调用会话类的方式。我希望 id 是持久的,并且仅在它过期或浏览器关闭时重新生成。当它基于文件时,它工作正常并保持相同的 ID。 刚刚用类构造函数编辑了帖子 【参考方案1】:

请检查您是否已使用 session_start() 开始会话。

【讨论】:

【参考方案2】:

我更改了 php.ini 文件中的一些变量,以查看其中是否存在问题,现在它在数据库中的工作与基于文件的工作一样好。保持相同的身份。

session.cookie_secure 在 .ini 文件中设置为 1,我将其更改为 0。

【讨论】:

以上是关于Ajax 和 PHP 会话的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 和 ajax 在 PHP 中设置会话变量

jquery 和 php ajax 会话

Ajax 请求和会话

使用 AJAX 检查 PHP 会话是不是存在或过期

ajax请求后php会话值被擦除

我如何在 php、mysql 和 ajax 的会话中显示用户在线或离线