PHP会话变量 - 消失并重新出现

时间:2009-07-16 18:52:52

标签: php

我有一个模板文件,其中包含我的所有页眉,页脚和常用信息。它包括当前页面的适当内容(两步视图模式)。

我正在尝试使用PHP Session变量设置登录系统。我可以设置变量,有时它们可​​以工作,但有时它们会消失。点击链接有时会让他们回来。

My site

使用

登录

用户名:test 密码:测试

var_dumps session_id$_SESSION位于顶部。

点击主页。如果会话变量消失,请单击home(可能需要多达10次)以查看会话信息返回。单击其他导航,有时会话信息会粘在一起,有时则不会。

以下是模板文件顶部的会话代码。

<?php
session_start();

require './classes/DBInterface.php';
$db = new DBInterface();

if($_REQUEST['submit']  ==  'Login') {
    $username=$_POST['username'];
    $password=$_POST['password'];

    echo '-- login -- '.$username;
    $rs = $db->verify($username,$password,"admin",0);
    $admin = $rs->current();
    if ($rs->valid()) {
        $_SESSION['username'] = $username;
    }
}

echo ' -- session id -- ';
var_dump(session_id());
echo ' -- session var -- ';
var_dump($_SESSION);

我使用的是PHP5。

3 个答案:

答案 0 :(得分:4)

如果您正在使用startlogic(似乎是?),您是否尝试在他们的常见问题解答中执行他们所说的内容:http://www.startlogic.com/knowledgebase/read_article.bml?kbid=600

他们表明了这一点:

  

要运行PHP会话,请包括   以下代码位于任何PHP的顶部   使用会话的脚本:   session_save_path(“您的主目录   path“/ cgi-bin / tmp); session_start();

也许这会有所帮助? 特别是如果他们使用某种负载均衡器,它平衡/ tmp,但不是你的主目录?

答案 1 :(得分:2)

如果您使用负载均衡设置,则可能只有N个服务器中的1个具有正确的会话数据。

默认情况下,会话数据存储在文件系统中 每个会话一个文件存储在/ tmp /中,以“sess”开头,后跟session_id

答案 2 :(得分:1)

你是绝对肯定的,之前没有任何东西被调用过吗?我知道session_start()修改了标题,除此之外,不确定为什么这不起作用。

继续并在session_start()调用之前打开脚本顶部的错误报告,并查看这有助于跟踪此问题:

error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors',1);
session_start()