Php 会话数据在一次登录时不显示,但在一次注销和再次登录时显示
会话数据在首次登录时不显示,但在注销后再次登录时显示 第一次登录时,我可以在example.com/page2.php上显示会话数据吗 example.com/page1.phpPhp 会话数据在一次登录时不显示,但在一次注销和再次登录时显示,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/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;