PHP session 索引在 header 重定向后未定义?
PHP session index undefined after header redirection?
我已经为此苦苦挣扎了几个小时,但我无法让它工作。当我重定向到另一个 PHP 页面时,我所有的 session 变量都是空的。我在 xampp 服务器上。
session.php
<?php
session_start();
if(isset($_POST['submitted']))
{
$_SESSION['first_name'] = "MAX";
var_dump($_SESSION);
header("Location: http://localhost:8080/secure login/session2.php");
die();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859- 1" />
<title>You Logged In</title>
</head>
<body>
<form action="session.php" method="post">
<div align="center"><input type="submit" name="submit" value="Login" /></div>
<input type="hidden" name="submitted" value="TRUE" />
</form>
</body>
</html>
session2.php
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>You Logged In</title>
</head>
<body>
<div id="main">
<?php
echo '<pre>' . print_r($_SESSION, TRUE) . '</pre>';
echo 'You are welcome to session2.php <br></br>';
if (isset($_SESSION['first_name']))
{
echo $_SESSION['first_name'] . "<br></br>";
}
else
{
echo "Your session doesn't exist. I hate php <br></br>";
echo $_SESSION['first_name'];
}
?>
</div>
</body>
</html>
session不保存,输出为;
Array
(
)
You are welcome to session2.php
Your session doesn't exist. I hate php
Notice: Undefined index: first_name in C:\xampp\htdocs\secure login\session2.php on line 28
我尝试了其他方法,例如将 session 变量的保存位置从 xampp/tmp 更改为另一个目录,但这并没有解决问题。我有一个程序,当我进行重定向时,我需要让用户保持登录状态,但这已经阻止了我超过一天。
更新:
目录之间的space不是问题,它暂时解决了问题,但那是因为还没有新目录的缓存。无论如何,又过了几天,我调试并意识到我在本地主机上有 运行 两个程序。两者都使用 sessions,因此如果一个终止 session,它也会终止另一个的 session,因为 localhost 就像一个域名,并且只有一个 session ].特别是,我的其他程序的 logout.php 并没有破坏 session 而是把它搞得一团糟,因为你必须删除浏览器缓存才能解开它。我正在清空 session 数组,破坏 session,并破坏 cookie,这就是问题所在,所以我无法再次登录。我所要做的只是摧毁 session 而已;
查看 -> Killing off Global Session Variable as a logout button
很可能是由于 die()
调用,我认为这导致它不写入会话。
先尝试session_write_close();
。
改变这个
<?php
session_start();
if(isset($_POST['submitted']))
{
$user = $_SESSION['first_name'] = "MAX";
if(isset($user))
{
header("Location: http://localhost:8080/secure login/session2.php");
}
else
{
header("Location: ");//index page
}
}
?>
在$user = $_SESSION['first_name'] = "MAX";
首先$_SESSION['first_name'] = "MAX";
执行,然后将结果分配给$user
。所以在 isset($user)
它检查是否设置
首先检查session.php
和session2.php
文件中的<?php
标签前是否有空格。
比从 session.php
中删除 var_dump($_SESSION);
。
并将文件夹名称更改为 secure_login
您似乎遇到了问题,因为您的名字中有一个 space secure login
localhost:8080/secure%20login/session.php
所以请尝试更改带下划线的名称 secure_login
并更改您的代码
<?php
session_start();
if(isset($_POST['submitted']))
{
$_SESSION['first_name'] = "MAX";
var_dump($_SESSION);
header("Location: http://localhost:8080/secure_login/session2.php");
die();
}
?>
我已经为此苦苦挣扎了几个小时,但我无法让它工作。当我重定向到另一个 PHP 页面时,我所有的 session 变量都是空的。我在 xampp 服务器上。
session.php
<?php
session_start();
if(isset($_POST['submitted']))
{
$_SESSION['first_name'] = "MAX";
var_dump($_SESSION);
header("Location: http://localhost:8080/secure login/session2.php");
die();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859- 1" />
<title>You Logged In</title>
</head>
<body>
<form action="session.php" method="post">
<div align="center"><input type="submit" name="submit" value="Login" /></div>
<input type="hidden" name="submitted" value="TRUE" />
</form>
</body>
</html>
session2.php
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>You Logged In</title>
</head>
<body>
<div id="main">
<?php
echo '<pre>' . print_r($_SESSION, TRUE) . '</pre>';
echo 'You are welcome to session2.php <br></br>';
if (isset($_SESSION['first_name']))
{
echo $_SESSION['first_name'] . "<br></br>";
}
else
{
echo "Your session doesn't exist. I hate php <br></br>";
echo $_SESSION['first_name'];
}
?>
</div>
</body>
</html>
session不保存,输出为;
Array
(
)
You are welcome to session2.php
Your session doesn't exist. I hate php
Notice: Undefined index: first_name in C:\xampp\htdocs\secure login\session2.php on line 28
我尝试了其他方法,例如将 session 变量的保存位置从 xampp/tmp 更改为另一个目录,但这并没有解决问题。我有一个程序,当我进行重定向时,我需要让用户保持登录状态,但这已经阻止了我超过一天。
更新:
目录之间的space不是问题,它暂时解决了问题,但那是因为还没有新目录的缓存。无论如何,又过了几天,我调试并意识到我在本地主机上有 运行 两个程序。两者都使用 sessions,因此如果一个终止 session,它也会终止另一个的 session,因为 localhost 就像一个域名,并且只有一个 session ].特别是,我的其他程序的 logout.php 并没有破坏 session 而是把它搞得一团糟,因为你必须删除浏览器缓存才能解开它。我正在清空 session 数组,破坏 session,并破坏 cookie,这就是问题所在,所以我无法再次登录。我所要做的只是摧毁 session 而已;
查看 -> Killing off Global Session Variable as a logout button
很可能是由于 die()
调用,我认为这导致它不写入会话。
先尝试session_write_close();
。
改变这个
<?php
session_start();
if(isset($_POST['submitted']))
{
$user = $_SESSION['first_name'] = "MAX";
if(isset($user))
{
header("Location: http://localhost:8080/secure login/session2.php");
}
else
{
header("Location: ");//index page
}
}
?>
在$user = $_SESSION['first_name'] = "MAX";
首先$_SESSION['first_name'] = "MAX";
执行,然后将结果分配给$user
。所以在 isset($user)
它检查是否设置
首先检查session.php
和session2.php
文件中的<?php
标签前是否有空格。
比从 session.php
中删除 var_dump($_SESSION);
。
并将文件夹名称更改为 secure_login
您似乎遇到了问题,因为您的名字中有一个 space secure login
localhost:8080/secure%20login/session.php
所以请尝试更改带下划线的名称 secure_login
并更改您的代码
<?php
session_start();
if(isset($_POST['submitted']))
{
$_SESSION['first_name'] = "MAX";
var_dump($_SESSION);
header("Location: http://localhost:8080/secure_login/session2.php");
die();
}
?>