我很困惑,并希望得到一些帮助。我有一个index.php,它从一开始就开始会话(session_start();)。从浏览器中,我看到一个cookie PHPSESSID是使用会话的ID创建的。PHP会话似乎只能被称为两次后才工作
但是,在文件夹/ var/lib/php/sessions(session.save_path)中,没有任何内容。
如果我在index.php中声明任何会话变量,它们不会通过session_start()传递给其他php脚本(甚至不会使用session_id(the-whatever-PHPSESSID); session_start();)。但是,如果我再次调用session_start(),我得到的会话功能正如我以为它应该(并在session.save_path中,我可以找到创建的会话ID的引用)。
这对我来说是相当困惑的,也许是因为错误,我可能不会解释发生了什么。如果您需要更多信息,请让我知道!
以下是我有:
的index.php
<?php
session_start();
$_SESSION['sessionid'] = session_id();
$sessionid = "'".$_SESSION['sessionid']."'";
$_SESSION['maxQueries'] = 1883; //11*171 + 2
$_SESSION['cCount'] = 0;
$_SESSION['queries'] = 0;
?>
有没有一种形式(的index.php),其中有一个PHP文件(captcha code by Simon Jarvis)创建的验证码键也开始这用session_start()。该验证码可以是这样产生的:
(的index.php)
<div class="field">
<input type="checkbox" id="human" name="human" onclick="captcha();"/>
<label for="human" class="humancb">I am human</label>
</div>
<div id = "captcha"></div>
(JavaScript)的
if(document.getElementById("human").checked){
document.getElementById("captcha").innerHTML = "<img src='./assets
/php/captcha_code_file.php?rand="+ Math.random() +"' id='captchaimg' >
</img>";}
当我加载的index.php我看到一个PHPSESSID - 没有在/ var/lib中/ PHP /会话。当我点击验证码复选框(并且调用了captcha_code_file.php)时,会话正常工作。我究竟做错了什么?我非常失望的是什么?
谢谢!
编辑1:我想我设法查明了这个问题。正如@Hans指出的,罪魁祸首是$ sessionid变量。当我提交表单时,我正在使用它将其作为输入传递给javascript函数。然后,我在xhr post请求中使用javascript var'sessionid'到一个php页面。所有的PHP页面都有session_start(),并且它们的session_id也通过了javascript。回想起来,我一点也不确定我可以提供一个理由说明为什么我这样做,但无论如何,当我省略了那部分,并且javascript在xhr中发送了与会话无关的所有变量时,问题似乎走开。再次,我不知道我说的这句话很好,我想我应该开始在脸上拍几下自己:D ...
Edit2:如果我可以选择两个答案,我都会很喜欢这个答案。这将反映真相。然而,汉斯,请理解,即使你在某种意义上更接近(显示罪魁祸首在这里),但这一切都是完全发生的 - 或者我认为 - 不同的原因。这就是我选择Walther的答案的原因。如果可以的话,我会选择两者。
非常感谢您的帮助!!!!!!
非常感谢@walther!然而,你能向我解释为什么我在index.php中声明的会话变量没有传递给其他脚本? – moijoune
@moijoune,基于你的描述,没有。会话对我来说没有任何问题,所以它对你的服务器设置或者你的代码来说肯定是一些小问题。有时检查变量的正确拼写可以解决长达一小时的头痛问题。你可以发布一个最小的可执行代码,清楚地显示你的问题,所以我们可以重现它吗? – walther
谢谢!!!当然!请稍等一下!! – moijoune