2012-08-12 65 views
0

我正在使用会话将一些数据存储在我的php网站中,但在某些页面中,当我在会话中获取数据时会发生一些变化,并且其某些时间会发生变化。 我搜索很多,找到在会话变量值已更改

session id value changes

一些回答“如果你注册,你可能会看到这样的行为全局,如果你在代码中使用的变量$ ID。作为测试,尝试:

<?php 
session_start(); 
$_SESSION['testing'] = 'Foo'; 
$testing = 'bar'; 
die($_SESSION['testing']); 
?> 

帮助我,我在寻找我的PHP文件,但我不找到类似的变量,如会话变量所以有什么问题? 给我一些关于php会话的细节,如果可能的话建议好书。

编辑:

我已设置使用phpinfo();功能为php.ini大家说的register_global关闭,比ckeck它的问题和检查register_global关闭。 但一段时间后,我用我的身份证登录,并在我的页面menu.php访问后,它改变了会话记录ID和我自动登录另一个帐户。 请帮我

回答

1

通过在php.ini文件中添加以下行来禁用Register_Globals可能会解决此问题。

register_globals = Off

如果您使用的是共享虚拟主机服务,遵循:

  • 如果你有机会到/ cgi-bin目录文件夹,然后在里面创建自定义的php.ini文件。
  • 如果您没有访问权限,则在根文件夹中创建您的自定义php.ini文件。

然后在php.ini文件中添加上面提到的那一行。

在您的.htaccess文件中添加以下代码行也解决了您的问题。

php_flag register_globals off

+0

我可以在所有dirs中添加php.ini吗? – Mehuldabhi 2012-08-12 14:36:29

+0

我已将它上传到/ cgi-bin文件夹......它是否需要在public_html中的其他文件夹中添加? – Mehuldabhi 2012-08-12 14:39:52

+0

你只需要一个自定义的php.ini文件。如果您的网络服务器支持htaccess文件,那么最好的解决方案是使用.htaccess文件。 – rajukoyilandy 2012-08-12 14:51:33

0

你不应该使用注册全局所以它不应该是一个问题。

加入这一行的.htaccess禁用,如果你有注册全局运行:

php_flag register_globals off 

它不能在运行时的ini_set()来完成,所以你需要使用的htaccess或为php.ini在之前的回答中。

+0

这是给我内部服务器错误 – Mehuldabhi 2012-08-12 14:37:02

0

这些日子不太可能,register_globals是你的问题。更有可能与a)存储实际会话数据的位置有关;和b)如何将“会话ID”从一个请求发送到下一个请求。

首先要看的是session_save_path(),它告诉PHP在磁盘上的哪个位置存储您放入会话变量的数据。

另一部分有点复杂,但是关于如何设置cookie,让PHP知道加载相同的会话而不是创建新的会话。您可能需要查看此Cookie的生命周期或适用的范围(域/子域/ URL路径)。看看session_set_cookie_params(),通常阅读PHP手册的这一部分来了解会话是如何工作的。