会话变量在页面刷新时重置
Session variables resets on the refresh of the page
我正在尝试为网站创建模拟登录,但每当我尝试在会话中保存用户名时,当页面重新加载时,它会将会话重置为 1。我将 session.auto_start 放在认为这是一个 session_start 问题,但它仍在发生
我的header.php
<?php
if($_SESSION['user'] != 1){
$user = $_SESSION['user'];
?>
<input type='submit' id='accEdit' value='Edit Account'/>
<label class='clickLog'>Welcome: <?=$user?></label>
<?php
}else{
?>
<input type='hidden' id='accEdit' value='Edit Account'/>
<p id="clickLog">Login?</p>
<?php
}
?>
函数
case "login":
$user = $_POST['user'];
$pass = $_POST['pass'];
if($user = "Cody" && $pass = "1234"){
$_SESSION['user'] = $user;
echo "yes";
}else{
echo "no";
}
exit;
ajax 通话
function login(user,pass){
var action = "login";
$.ajax({
url:'appedit.php',
type: "POST",
data: {action:action,user:user,pass:pass},
success: function(response){
if(response == "yes"){
alert(response);
$("#clickLog").html("<label class='clickLog'>Welcome: " + $user + "</label>");
$("#clickLog").show();
$("#accEdit").prop("type", "submit");
}else{
alert(response + "fail");
$("#clickLog").show();
}
},
error: function (request, status, error) {
alert(error);
}
});
}
我知道这不是最好看的代码,但我只是想把一些东西拼凑起来。
你在这里分配
if($user = "Cody" && $pass = "1234"){
^ ^
你应该比较的地方
if($user == "Cody" && $pass == "1234"){
^^ ^^
使用 2 个等号。
- 1 个等号 => 赋值
- 2 个等号 => 比较
- 3 个等号 => 如果相同
查阅手册http://php.net/manual/en/language.operators.comparison.php
此外,请确保会话确实已在所有使用会话的页面中启动 session_start();
。
- 使用
isset()
.
- 使用
!empty()
.
将 error reporting 添加到您的文件的顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告只能在试运行中进行,绝不能在生产中进行。
- 检查你的控制台。
另外 如果您打算继续创建登录系统 don't limit passwords and use the proper methods to hash and verify passwords with PHP。
如果您打算继续使用 AJAX function provided by jQuery,您应该知道某些 return 功能已被弃用,并将很快被删除:
Deprecation Notice: The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callbacks are deprecated as of jQuery 1.8. To prepare your code for their eventual removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.
我正在尝试为网站创建模拟登录,但每当我尝试在会话中保存用户名时,当页面重新加载时,它会将会话重置为 1。我将 session.auto_start 放在认为这是一个 session_start 问题,但它仍在发生
我的header.php
<?php
if($_SESSION['user'] != 1){
$user = $_SESSION['user'];
?>
<input type='submit' id='accEdit' value='Edit Account'/>
<label class='clickLog'>Welcome: <?=$user?></label>
<?php
}else{
?>
<input type='hidden' id='accEdit' value='Edit Account'/>
<p id="clickLog">Login?</p>
<?php
}
?>
函数
case "login":
$user = $_POST['user'];
$pass = $_POST['pass'];
if($user = "Cody" && $pass = "1234"){
$_SESSION['user'] = $user;
echo "yes";
}else{
echo "no";
}
exit;
ajax 通话
function login(user,pass){
var action = "login";
$.ajax({
url:'appedit.php',
type: "POST",
data: {action:action,user:user,pass:pass},
success: function(response){
if(response == "yes"){
alert(response);
$("#clickLog").html("<label class='clickLog'>Welcome: " + $user + "</label>");
$("#clickLog").show();
$("#accEdit").prop("type", "submit");
}else{
alert(response + "fail");
$("#clickLog").show();
}
},
error: function (request, status, error) {
alert(error);
}
});
}
我知道这不是最好看的代码,但我只是想把一些东西拼凑起来。
你在这里分配
if($user = "Cody" && $pass = "1234"){
^ ^
你应该比较的地方
if($user == "Cody" && $pass == "1234"){
^^ ^^
使用 2 个等号。
- 1 个等号 => 赋值
- 2 个等号 => 比较
- 3 个等号 => 如果相同
查阅手册http://php.net/manual/en/language.operators.comparison.php
此外,请确保会话确实已在所有使用会话的页面中启动 session_start();
。
- 使用
isset()
. - 使用
!empty()
.
将 error reporting 添加到您的文件的顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告只能在试运行中进行,绝不能在生产中进行。
- 检查你的控制台。
另外 如果您打算继续创建登录系统 don't limit passwords and use the proper methods to hash and verify passwords with PHP。
如果您打算继续使用 AJAX function provided by jQuery,您应该知道某些 return 功能已被弃用,并将很快被删除:
Deprecation Notice: The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callbacks are deprecated as of jQuery 1.8. To prepare your code for their eventual removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.