我无法在设置它们的页面上使用会话变量,它们就像非会话变量一样。我在其他六个类似的论坛上发现了一个类似的问题,但在其他案例中的答案总是不适用。
以下是我的文件:
sess1.php
<?php
session_start();
session_register("userid");
session_register("textvar");
$_SESSION['userid'] = 10333 ;
$_SESSION['textvar'] = TextVariable ;
echo "<p>User ID is: " . $_SESSION['userid'] . "</p>" ;
echo "<p>Another variable is: " . $_SESSION['textvar'] . "</p>" ;
?>
<p>Go to the <a href="sess2.php">next page</a>.</p>
和, sess2.php
<?php
session_start();
echo "<p>The userid session variable is: " . $_SESSION['userid'] . "</p>";
echo "<p>The other session variable is: " . $_SESSION['newvar']. "</p> ";
?>
每种情况下的浏览器输出是:
sess1.php
用户名是:10333
另一个变量是:TextVariable
转到[下一页]。
和, sess2.php
userid会话变量是:
另一个会话变量是:
转到[最后一页]。
有些事情不是:
我的智慧结束了。有什么建议吗?
非常感谢。
答案 0 :(得分:7)
session_register()
不是必需的,可能会导致此处出现问题。阅读session_register()
上的文档 - 它旨在使用现有变量分配会话变量。
和here:
嗯,session_register()告诉PHP应该将某个全局变量视为会话变量。这意味着在脚本执行结束时(通常发生会话数据写入时),将使用当前启用的会话处理程序写入该全局变量的结果值。
我认为这是您遇到的问题。在脚本执行结束时,会话变量被覆盖。
答案 1 :(得分:3)
我遇到了同样的问题。原因是,在 php.ini 中,我将 session.cookie_secure 参数的值设置为 1 。但我在网址中使用的是http而不是https。使用https解决了问题。
设置session.cookie_secure = 1表示只应通过安全连接发送cookie。因此,我在使用http。
时在每个新页面上获得了新的session_id答案 2 :(得分:2)
我看到的一个错误是,您在第一个文件中设置了$_SESSION['textvar']
,而在第二个文件中,您正在调用$_SESSION['newvar']
。
另外,我在我知道正在运行的服务器上测试了你的代码,除了上面的错误之外它还运行正常。
我也尝试删除session_register()
,但代码仍能完美运行。
答案 3 :(得分:2)
会话ID必须以某种方式携带,以便可以在多个页面上使用相同的会话。一般情况下,这是通过Cookie完成的(请参阅session.use_cookies
),但也可以在网址或表单中完成(请参阅session.use_trans_sid
)。
首先,您必须确保传输会话ID,以便PHP可以加载正确的会话和会话数据。
答案 4 :(得分:1)
“session_register()接受可变数量的参数,其中任何参数都可以是包含变量名称的字符串,也可以是由变量名称或其他数组组成的数组。每个名称session_register()在当前会话中注册具有该名称的全局变量。“
因为没有带这些名称的变量,结果将无法预测。
只需使用$_SESSION[$key] = $value;
答案 5 :(得分:1)
如果上述所有方法都无法解决问题,我只会问明显:在开启php标签之前不会有任何空格或换行符?
您还可以检查服务器错误日志文件中的消息,该消息应该告诉您是否定义了变量(尽管我猜这也取决于错误报告的级别)。
答案 6 :(得分:0)
使用某种工具并检查http标头,以便您可以看到Cookie的发送方式。也许您的网络服务器配置错误,并发送带有无效不同域的cookie。
您可能希望在每个请求上查看session_set_cookie_params(),并确保设置正确的域,路径等。
答案 7 :(得分:0)
要检查的另一个显而易见的事情是:
确保您的磁盘空间不满;这将阻止会话数据被保存。
答案 8 :(得分:0)
知道这是一篇较旧的帖子,但我遇到了类似的问题(不使用session_register())。
由于会话过于频繁而导致会话超时,并且由于服务器设置('特殊'Windows服务器托管环境(使用Apache)),因此无法更改PHP会话超时值。
最终结果是/现在转换为具有延长寿命的Cookie后,cookie数据仍然丢失(传输中)?有时。
非常令人沮丧。
我还没有在LAMP环境中发生这种情况,所以可能要问的问题是你是否使用LAMP服务器。
希望这会有所帮助。我不认为这是一个PHP问题。
答案 9 :(得分:0)
检查PHP服务器的服务器日志,例如,nginx或apache。
您可以在nginx error.log中找到会话不起作用的信息。该文件的路径通常为:/var/log/nginx/error.log
。
在我的情况下,它说无法保存会话数据。事实证明,在同一目录中,旧error.log.1
文件的大小为17 GB,占用了所有可用磁盘空间。
只需释放磁盘空间即可恢复会话的正常行为。
答案 10 :(得分:-1)
在两个文件中使用session_register,它应该有效。