2014-11-24 100 views
0

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

<?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') 
); 

}

+0

脚本 - 这ouhtit Ajax请求单独的文件或嵌入结构,你可能已经忘记了在session_start() – 2014-11-24 06:23:31

+0

的处理程序类是从索引页面和ajax页面调用的。在每个页面上设置处理程序后调用session_start。会话不会保持持久性,每次调用session_start时都会重新生成id,这使得不能从ajax传递会话并在主类中保留它们。 – Finn 2014-11-24 06:37:23

+1

你能告诉我你是如何处理会议的吗? – Tristup 2014-11-24 06:41:49

回答

0

我在php.ini文件中修改了一些变量,以查看是否有内容导致问题,现在它在数据库中也能像基于文件一样工作。保持相同的ID。

session.cookie_secure设置为1 .ini文件,我改变了0

3

请检查您是否已经与在session_start开始会话()。