我有一个使用会话变量的应用程序没问题。我在每个使用的页面上的标题之前启动会话,它一直很好然后突然间,当我导航到设置会话变量的页面以外的其他页面时,我得到一个未定义的索引错误。 但仅限某些浏览器。有时会话会被维护,有时则不会。
似乎某些时候没有存储cookie。我已经使用不同的浏览器进行了检查,有时会存储cookie,有时则不会。
我做了一个实验。我使用firefox来使用应用程序,我一直关注存储会话的tmp文件夹。我把它清理干净了。使用firefox我开始使用应用程序,使用会话正在使用的所有页面,最后我检查了tmp文件夹,并且它有一个会话文件。
与Internet Explorer完全相同,现在有7种不同的会话文件。
我正在使用带有WAMP堆栈的PHP 5.3.0。 Apache 2.2.11。在我的phpinfo()中启用了会话支持。
我在第一页调用var转储并打印出会话数据。在任何后续页面上,会话变量都是空的。
<?php var_dump($_SESSION); ?>
array(0){}
任何人都可以帮我找到解决方法吗?
更新 - PHP INI会话设置
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 82.68.26.169 82.68.26.169
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从另一个域(我创建的)拉入页面,我试图设置的cookie被阻止。设置一个P3P标题,问题似乎已经解决了!
答案 0 :(得分:3)
您是否在访问会话数据的每个页面上调用session_start()
?
编辑:你每次都收到相同的会话ID吗? 此外,由于设置原因,您是否会遗漏某些错误或警告(例如标头已发送)?
答案 1 :(得分:3)
your previous question的建议仍然有效:请比较会话ID。
解决方案可能就像浏览器不接受会话cookie一样简单。
您可以通过调用session_id()
来检索会话ID。在session_start()
之后立即执行此操作,它应该为您提供一个恒定值如果会话相同。否则,对于每个请求,都会实例化一个新会话。
同时检查C:\wamp\tmp
。此目录中的大量文件可能表示每个请求的新会话。
编辑由于我们已经确认了每个请求的新会话,因此需要确定是否接受了会话Cookie。检查浏览器的设置并确认可以找到名称为PHPSESSID
的域名(我猜它是“localhost”)的cookie。
答案 2 :(得分:1)
这是
中的感觉while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
{
$_SESSION['saveddata'] = $row;
}
它会在每次迭代时重写$_SESSION['saveddata']
值。可能你的意思是
$_SESSION['saveddata'][] = $row;
对$atid = $_SESSION['saveddata']['autotaskid'];
答案 3 :(得分:1)
查看会话设置。您有一个完整列表:
<?php
phpinfo();
?>
向下滚动到“会话”表。
特别要确保session.save_path
目录存在且可写。
答案 4 :(得分:0)
当为每个请求创建新会话ID时,很可能是会话路径(save_path和cookie_path)存在问题,如果您在一台服务器上托管不同的应用程序(共享主机),则发生这种情况的可能性会更大其中一些应用程序也实现了会话。 这会导致/ tmp目录中出现冲突。 您可以更改ini文件的配置,但最好在运行时配置这些参数。
SELECT
DISTINCT
customer_rk,
max(monthly_income_amt),
min(monthly_income_amt),
max(monthly_income_amt) / min(monthly_income_amt) AS income_ratio
FROM asql.individual_customer
WHERE middle_nm LIKE '%ВИЧ'
GROUP BY customer_rk
HAVING income_ratio > 2;
我希望能帮助每个人解决这个问题。 #CodeOn
答案 5 :(得分:0)
我通过清除旧会话的\ tmp目录在本地WAMP上解决了此问题。