PHP会话似乎只在被调用两次后才起作用

时间:2017-04-26 10:35:28

标签: php session

我很困惑,希望得到一些帮助。我有一个index.php,它从一开始就开始一个会话(session_start();)。在浏览器中,我看到使用会话ID创建了一个cookie PHPSESSID。

但是,在文件夹/ var / lib / php / sessions(session.save_path)中,没有任何内容。

如果我在index.php中声明任何会话变量,它们不会通过session_start()传递给其他php脚本(甚至不包括session_id(-what-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 / sessions中没有。当我点击captcha复选框(并调用captcha_code_file.php)时,我会使会话正常工作。我究竟做错了什么?我特别想念的是什么?

谢谢!

Edit1:我想我设法找出了问题所在。正如@Hans所说,罪魁祸首是$ sessionid变量。我正在使用它在提交表单时将其作为输入传递给javascript函数。然后,我在xhr post请求中使用javascript var'comminid'到php页面。所有php页面在开头都有session_start(),它们的session_id也通过javascript传递。回想起来,我完全不确定我可以提供一个论据,为什么我这样做,但是,无论如何,当我省略那部分并且javascript在xhr帖子中发送与会话无关的所有变量时,问题似乎是走开。再说一次,我不确定我这么好说,我想我应该开始在脸上拍几次:D ......

Edit2:如果我能选择两个答案非常有帮助,我会很高兴。这将反映真相。然而,汉斯,请理解即使你在某种意义上更接近(在这里显示出罪魁祸首),这一切都发生在一个完全 - 或者说我认为 - 不同的原因。这就是我选择Walther答案的原因。如果可以,我会选择两者。

非常感谢你帮助!!!!!!

2 个答案:

答案 0 :(得分:1)

来自官方文件:

  

会话遵循简单的工作流程。会话启动时,PHP会   使用传递的ID检索现有会话(通常来自   一个会话cookie)或如果没有传递会话,它将创建一个新的   会话。 PHP将使用任何会话填充$ _SESSION超全局   会话开始后的数据。当PHP关闭时,它会   自动获取$ _SESSION超全局的内容,   序列化它,并使用会话保存处理程序将其发送以进行存储。

=&GT;保存到文件时,请求在完成执行当前脚本时发生,而不是在第一次session_start调用时发生。

http://php.net/manual/en/session.examples.basic.php

答案 1 :(得分:1)

$ sessionid = $ _SESSION ['sessionid'];是正确的陈述

$ sessionid =“'”。$ _ SESSION ['sessionid']。“'”;

尝试此调整,看看会发生什么