会话变量在页面刷新时重置

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.