Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 会话数据在一次登录时不显示,但在一次注销和再次登录时显示_Php_Session Variables - Fatal编程技术网

Php 会话数据在一次登录时不显示,但在一次注销和再次登录时显示

Php 会话数据在一次登录时不显示,但在一次注销和再次登录时显示,php,session-variables,Php,Session Variables,会话数据在首次登录时不显示,但在注销后再次登录时显示 第一次登录时,我可以在example.com/page2.php上显示会话数据吗 example.com/page1.php example.com/page2.php example.com/logout.php 您忘记了注销.php上的会话\u start() <?php session_start(); //<------- Here session_destroy(); header("Location: http

会话数据在首次登录时不显示,但在注销后再次登录时显示

第一次登录时,我可以在example.com/page2.php上显示会话数据吗

example.com/page1.php


example.com/page2.php


example.com/logout.php


您忘记了
注销.php上的
会话\u start()

<?php
session_start(); //<------- Here
session_destroy();
header("Location: http://example.com/page1.php");
?>
你应该打电话

session_write_close();
以前

header("Location: ...");
确保在请求第2页之前将第1页中的会话数据集写入磁盘

此外,使用

header("Location: ...");
在第1页上,将在page2.php上保留未设置的$\u SERVER[“HTTP\u REFERER”]值。我通过将page2.php更改为

<?php
    echo "<pre>";
    echo htmlspecialchars(print_r($_SERVER, true));
    echo "</pre>";
    if ($_SERVER["HTTP_REFERER"] == "http://example.com/page1.php")
    {
        session_start();
        echo $_SESSION["id"];
        echo $_SESSION["name"];
        echo $_SESSION["email"];
    }
?>
<a href="logout.php">Logout</a>
未在第2页的$\u服务器阵列中列出

在第1页,只是为了测试,而不是使用

echo '<a href="page2.php">Page 2</a>';
试用

<?php
    session_start();
    $_SESSION["id"] = 1;
    $_SESSION["name"] = "Dummy";
    $_SESSION["email"] = "dummy@example.com";
    session_write_close();
    header("Location: page2.php");
?>
echo';
您应该会发现,当您请求page1.php,然后单击第2页的链接时,第2页上会设置$\u SERVER[“HTTP\u REFERER”]值

因此,您的问题可能包括重定向未设置$\u服务器[“HTTP\u REFERER”]。一旦更改脚本以解决此问题,您可能会有更好的更改或解决会话问题

你可能想试试

page1.php

<?php
    session_start();
    if (isset($_SESSION["id"]) && ($_SESSION["id"] == 1))
    {
        echo $_SESSION["id"];
        echo $_SESSION["name"];
        echo $_SESSION["email"];
        echo '<a href="logout.php">Logout</a>';
    }
    else 
    {
        echo 'You are not logged in. <a href="page1.php">Login</a>';
    }
?>

page2.php

<?php
    session_start();
    $_SESSION = array();
    session_write_close();
    echo 'You have been logged out. <a href="page1.php">Login</a> <a href="page2.php">Test login status</a>';
?>

logout.php

       <?php 
            //says "Welcome, (whatever the user's name is)!"
            $welcomemessage = "Welcome, " . $_SESSION["user"] . "!";
            if ($_SESSION["loggedIn"] === 'y') {
            echo $welcomemessage; }
       ?>

我知道这是一个4年前的线程坏死,你没有确切的情况,但我发现:

我对我的欢迎留言“欢迎,[用户]!”有问题。我无法让它显示,直到我注销并再次登录,类似于您的问题标题

$_SESSION["user"] = $newusername;
这将更改初始用户名,因为即使您更改了旧用户名,也会将其设置为当前会话变量

因此,如果我将我的用户名从John更改为Jeff,任何提到John的内容都会在显示“new username”变量时立即更改为Jeff,而不必注销,然后登录代码以从数据库中获取新用户名并显示它


我知道这对你没有帮助,因为已经4年了,但这是我能找到的最接近我问题的问题,我想向其他查找此问题的人分享我的简单解决方案:)

在logout.php中是否需要它?因为我正在销毁已经启动的会话。它仍然不工作。已放置会话_write_close();在page1.php的头之前,但它仍然不工作。在注销页面的头(“位置:…”)之前添加会话_write_close(以确保清除的会话也写入磁盘)。此外,我将替换会话_destroy();使用$_SESSION=array();会话前写入关闭();是的,我也在logout.php的头(“Location:…”)之前添加了session_write_close(),但我的问题仍然是一样的。当我再次关闭并启动浏览器时,会话数据在第一次登录时不会显示在page2.php中,但在注销后再次登录时会显示。非常感谢您的指导。我昨天花了13个小时来解决这个问题。现在按照你的代码解决了。我必须确保每次session_start()都是PHP代码中的第一行,并在显示会话数据时检查session变量是否已设置。感谢您的回答,但老实说,这个问题太老了,我甚至不记得我在哪里遇到过这个问题。
echo '<a href="page2.php">Page 2</a>';
<?php
    session_start();
    $_SESSION["id"] = 1;
    $_SESSION["name"] = "Dummy";
    $_SESSION["email"] = "dummy@example.com";
    session_write_close();
    header("Location: page2.php");
?>
<?php
    session_start();
    if (isset($_SESSION["id"]) && ($_SESSION["id"] == 1))
    {
        echo $_SESSION["id"];
        echo $_SESSION["name"];
        echo $_SESSION["email"];
        echo '<a href="logout.php">Logout</a>';
    }
    else 
    {
        echo 'You are not logged in. <a href="page1.php">Login</a>';
    }
?>
<?php
    session_start();
    $_SESSION = array();
    session_write_close();
    echo 'You have been logged out. <a href="page1.php">Login</a> <a href="page2.php">Test login status</a>';
?>
       <?php 
            //says "Welcome, (whatever the user's name is)!"
            $welcomemessage = "Welcome, " . $_SESSION["user"] . "!";
            if ($_SESSION["loggedIn"] === 'y') {
            echo $welcomemessage; }
       ?>
$_SESSION["user"] = $newusername;