如何在移动设备的重定向页面上传递 PHP 会话值?
How to pass PHP session value on redirecting page in mobile?
我做了一个简单的登录应用程序来获取用户的电子邮件和密码。不管他们的凭据是什么,应用程序只是在主页中回应凭据。现在,我遇到了有关移动会话的问题。这是登录页面的代码:
<?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。感谢参与回答的人
首先,session_start()
应该在每个代码的第一行。
不要回显 session_start()
之前的任何内容
因此,删除 if() {...}
块中的 session_start()
并将它们放在页面的最顶部
<?php
session_start();
//Verify post variables
if(isset($_POST['username') && isset($_POST['password')) {
$username = trim(addslashes($_POST['username']));
$password = $_POST['password'];
//You don't want empty fields
if(empty($username) || empty($password)) die('Some info is empty');
//After working with variables
//set session
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
//Session is set and live
}
?>
在首页
您可以像这样检索会话
<?php
session_start();
//Check previous session data
if(!isset($_SESSION['username']) || empty($_SESSION['username'])) die('Error');
if(!isset($_SESSION['password']) || empty($_SESSION['password'])) die('Error');
//Get sessions values
$username = trim($_SESSION['username']);
$password = $_SESSION['username'];
?>
我已经解决了。问题是我的连接太安全了,以至于我的会话 ID 在移动网页的每个实例上都在变化。通过操作 session_id()
函数,我设法在一段时间内获得了一个唯一的静态会话 ID。感谢参与回答的人
我做了一个简单的登录应用程序来获取用户的电子邮件和密码。不管他们的凭据是什么,应用程序只是在主页中回应凭据。现在,我遇到了有关移动会话的问题。这是登录页面的代码:
<?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。感谢参与回答的人
首先,session_start()
应该在每个代码的第一行。
不要回显 session_start()
因此,删除 if() {...}
块中的 session_start()
并将它们放在页面的最顶部
<?php
session_start();
//Verify post variables
if(isset($_POST['username') && isset($_POST['password')) {
$username = trim(addslashes($_POST['username']));
$password = $_POST['password'];
//You don't want empty fields
if(empty($username) || empty($password)) die('Some info is empty');
//After working with variables
//set session
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
//Session is set and live
}
?>
在首页 您可以像这样检索会话
<?php
session_start();
//Check previous session data
if(!isset($_SESSION['username']) || empty($_SESSION['username'])) die('Error');
if(!isset($_SESSION['password']) || empty($_SESSION['password'])) die('Error');
//Get sessions values
$username = trim($_SESSION['username']);
$password = $_SESSION['username'];
?>
我已经解决了。问题是我的连接太安全了,以至于我的会话 ID 在移动网页的每个实例上都在变化。通过操作 session_id()
函数,我设法在一段时间内获得了一个唯一的静态会话 ID。感谢参与回答的人