ajax请求后,php会话值被擦除

时间:2011-07-22 11:25:10

标签: php ajax session request

我有一个脚本,我可以在用户登录时设置我的uid和电子邮件会话。

有两个变量:

$_SESSION["uid"] = $user_id;//1,2,3 etc..
$_SESSION["email"] = 'my@email.com';

我有一个功能,用户可以通过ajax发布一些数据。 但是当数据发送到服务器并且请求完成后,我的电子邮件会话的值就会被擦除,这会导致我的用户无法执行某些操作。

我搜索了我的整个剧本而我找不到任何

$_SESSION["email"] = '';
完成ajax请求或其他任何地方之后

任何线索?

修改 _SESSION的var_dump:

array(2) { ["email"]=> &string(0) "" ["uid"]=> &string(11) "91283921834" }

解: 我的主机显示5.2.17为默认的php版本所以我不得不打电话

AddType application/x-httpd-php53 .php

在我的.htaccess文件中,让它看到5.3.5作为实时php版本删除了引用,现在它的工作正常。

3 个答案:

答案 0 :(得分:2)

您必须在每个脚本的顶部调用session_start()才能实际创建会话

将其放在<?php标记

之后

答案 1 :(得分:2)

您可以通过参考会话为某个地方分配变量,您可以在&中使用var_dump字符看到这一点:

array(2) { ["email"]=> &string(0) "" ["uid"]=> &string(11) "91283921834" }
#                     ^^^                     ^^^

PHP中的引用意味着,在您的情况下,$_SESSION['email']已成为其他变量的别名。如果更改其他变量,$_SESSION['email']将会更改,而且只会是别名。

因此,您不仅需要查看更改$_SESSION['email']的代码,更重要的是,哪些部分会使其成为别名,以及别名也会更改。

这只是一个猜测,但搜索&$email$email。查找通过引用接受参数的函数(&$parameter),按引用返回或通过引用调用参数。

答案 2 :(得分:0)

当我第一次开始使用php会话时,这种事情让我疯狂,直到我掌握了它们。

你应该注意一些事情,主要是你的会话cookie是关键,因为只要你愿意,它就会持续存在。

即使您启动会话并且会话cookie设置在一个页面上,您发送到浏览器的每个新页面仍应检查是否已设置会话。

正如您所提到的,您使用ajax我假设一个页面(例如表单)通过ajax处理,并且响应要么返回到同一页面,要么重定向。你在哪里设置会话?它是在Ajax处理脚本中 - 还是在原始表单页面中?

如果您在成功进行AJAX调用后重定向,请考虑当用户点击“返回”时会发生什么。您是否希望显示相同的数据,或者表单是否需要再次显示新内容?

如果没有更多信息,我无法给你一个具体的答案,但我有一个可能有用的有趣问题。

MY SO Question on sesssions