【发布时间】:2021-10-01 14:48:46
【问题描述】:
我制作了一个简单的登录应用程序,用于获取用户的电子邮件和密码。无论他们的凭据是什么,应用程序都只是在主页中回显凭据。现在,当涉及到移动设备时,我遇到了有关会话的问题。这是登录页面的代码:
<?php
$username = 'rb';
$password = 'password';
if(isset($_POST['enter'])){
session_start();
$_SESSION['username'] = $_POST['username'];
$_SESSION['password'] = $_POST['password'];
header('Location: home.php');
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="#" method="POST">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" name="enter" />
</form>
</body>
</html>
这是主页:
<?php
echo 'Home';
session_start();
if(isset($_SESSION['username'])){
echo $_SESSION['username'];
echo $_SESSION['password'];
}else{
echo 'Error';
}
if(isset($_POST['logout'])){
session_destroy();
header('Location: login.php');
die();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="#" method="POST">
<input type="submit" name="logout" value="Logout"/>
</form>
</body>
</html>
问题是会话变量在重定向到主页时不会持续存在。在桌面,它工作正常,但在移动,它显示未定义的索引错误,这意味着会话变量不存在。可能是什么问题?正如我所测试的,此代码有效并且会话持续存在:
<?php
echo 'Home';
session_start();
if(isset($_SESSION['username'])){
echo $_SESSION['username'];
echo $_SESSION['password'];
}else{
$_SESSION['username'] = 'This is the username';
$_SESSION['password'] = 'This is the password';
echo $_SESSION['username'];
echo $_SESSION['password'];
echo 'Error';
}
if(isset($_POST['logout'])){
session_destroy();
header('Location: login.php');
die();
}
?>
编辑:我在每个 php 文件的开头都尝试过 session_start(),但它也没有工作。
编辑 2: 我已经解决了。问题是我的连接太安全了,以至于我的会话 ID 在移动设备上的每个网页实例都发生了变化。我设法在一段时间内获得了唯一的静态会话 ID。感谢那些参与回答的人。
【问题讨论】:
-
您可以添加您看到的错误的文本吗?
-
注意:未定义索引:第 10 行 C:/xampp/htdocs/home.php 中的用户名。我在 else 子句中添加了 echo $_SESSION['username']
-
你不能在
session_start()之前echo 'Home';。标头函数必须位于任何输出之前 -
我已经尝试过@AndreaOlivato,但它不起作用。它具有相同的输出。
标签: php session session-variables