我正在使用wamp2.0 - PHP 5.3,apache 2.2.11,但我的会话没有存储数据。
我有一个接受参数的页面,我想在会话中存储(简化版本),所以当我来到
http://www.example.com/home.php?sessid=db_session_id
脚本如下:
session_start();
$sessid = @$_GET['sessid'];
if ($sessid) {
$_SESSION['sessid'] = $sessid;
}
var_dump($_SESSION);
和输出:
array(1) { [0]=> string(13) "db_session_id" }
这很好,但是当我转到link(没有sessid参数)时,$_SESSION
数组为空。我在尝试在没有参数的情况下访问页面之前尝试评论$_SESSION['sessid'] = $sessid;
行,但它仍然没有用。
我已检查session_id()
输出,会话ID保持不变。
来自phpinfo()的会话设置
Session Support enabled
Registered save handlers files user
Registered serializer handlers php php_binary wddx
Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path c:/wamp/tmp c:/wamp/tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies On On
session.use_trans_sid 0 0
修改
会话被iframe删除。我不知道为什么,但什么时候 评论说,会议工作正常。事实是,iframe必须留下来 那里(当然是坏的,但我无能为力)。 嗯...你知道任何变通办法来解决问题吗? 用iframe?
答案 0 :(得分:2)
这是一个老问题,但我带着同样的问题来到这里。由于问题没有得到解答,所以我发现了它。
我有类似的问题,在我的情况下问题是我没有在使用会话的所有页面中调用session_start()
。我想我应该只在“登录”页面中调用它,但事实并非如此。
此外,请记住必须在session_start()
代码之前调用<html>
。
答案 1 :(得分:2)
您必须在每个页面中调用session_start();
命令。它对我有用。在将任何输出(html,输出,甚至空格)发送给用户之前,您还必须调用此方法。
答案 2 :(得分:1)
如果你遇到类似的问题,我发现这是一个非常值得的测试。在浏览器中运行一些请求,看看你得到了什么。
<?php
session_start();
$_SESSION['test'][] = time();
header('Content-type: text/plain');
print_r($_SESSION);
致作者:您的上一条评论提到您的脚本正常运行 - 对您有好处。如果它破了,那么试试上面的代码,让我知道你得到了什么。
答案 3 :(得分:1)
只有当相对于同一个域时,帧才能访问该会话。例如:
<?
$_SESSION["foo"]="foo";
?><html>
<body>
<iframe src ="test.php" width="200" height="200"></iframe>
</body>
</html>
<?
print_r($_SESSION);
?>
应该在iframe外部和内部工作。如果您仍有问题,请尝试:
<?php session_start();
$sessid = $_GET['sessid'];
if (isset($sessid) && $sessid != "" && $sessid != NULL) {
$_SESSION['sessid'] = $sessid;
}
print_r($_SESSION);?>
答案 4 :(得分:1)
今天我花了大约四个小时没有在服务器上保存$ _SESSION。 结果证明是一个服务器问题。系统(Windows 2003,IIS 6)使用Windows默认临时文件夹C:\ Windows \ Temp \来存储会话。它创造了它,但它是空的。
出于某种原因,它刚停止工作(之前没有问题)。我最好的猜测是它达到了一些限制或文件夹只包含太多文件。 我通过将session.save_path设置为另一个文件夹来对其进行排序。
答案 5 :(得分:0)
我只能从那里发生的事情中猜出你的会话没有被存储。你的session.save_path - &gt; c:/ wamp / tmp一个可写(取消选中只读属性)文件夹? apache是以管理员身份运行还是具有足够权限的某个级别,可以在控制面板中的管理员工具中写入服务中的该文件夹?
实际上,请检查:PHP session vars not being maintained。本质上,在该页面上运行session_id()两次并比较会话ID。如果它们不同,那么您的浏览器不接受会话cookie。
编辑:没有意识到你已经这样做了。 ^这可能会有所帮助。 Link&lt; ---用会话的调试代码查看第二个建议/答案。
答案 6 :(得分:0)
http://php.net/manual/en/function.session-start.php
你必须在$ _SESSION全局数组中放置一些东西才能注册任何东西,否则它就是空的......
由于您正在测试是否存在sessid以将其添加到$ _SESSION,因此$ _SESSION仍为空。
尝试类似:
session_start();
$_SESSION['sessid'] = 123456789;
var_dump($_SESSION);
答案 7 :(得分:0)
...
可能是因为您本身并未使用域名?在您的问题中,您使用的是example.com,但是您正在本地计算机上进行开发。我假设您使用的是localhost。
您应该知道无法在localhost上设置Cookie,例如:Cookies on localhost with explicit domain
您是否在其他主机上尝试过代码?
http://blog.perplexedlabs.com/2008/12/21/php-sessions-on-localhost/
答案 8 :(得分:0)
我不知道这是否是你问题的原因(错误抑制@
似乎有点不合适......),但我会简化一点。
所以而不是:
$sessid = @$_GET['sessid'];
if ($sessid) {
$_SESSION['sessid'] = $sessid;
}
我会用:
if (isset($_GET['sessid']))
{
$_SESSION['sessid'] = $_GET['sessid'];
}
顺便说一下,我还会对$_GET['sessid']
进行一些输入检查,以确保它只包含允许的字符。