doubailian4459 2018-05-20 10:50
浏览 73
已采纳

在php中设置cookie并通过ajax运行会话

Hi I'm having trouble to setup cookie and run the session through ajax from php.

this is a login page.

<?php
    include ("includes/main_modal.php");
    require_once('includes/mysqli_connect.php'); //function called

 ?>
 <script>
 //user validation
 var strUser = "";
 var strPsswrd = "";
 var xmlhttp = new XMLHttpRequest();

 function response(e)
 {
    if(e.button == 0)
    {
            if(login.uname.value == "")
            {
                document.getElementById("emailError").innerHTML = "Please enter useremail";
            }
            else if(login.psw.value == "")
            {
                document.getElementById("passwordError").innerHTML = "Please enter password";
            }
            else
            {
                strUser = login.uname.value;
                strPsswrd = login.psw.value;
                xmlhttp.onreadystatechange = change;

                function change()
                {
                    if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
                    {
                        if(xmlhttp.responseText == "true")
                        {
                            location.href="index.php";
                        }
                        else {
                            document.getElementById("passwordError").innerHTML = xmlhttp.responseText;
                        }
                    }
                }
                xmlhttp.open("GET", "loginUser.php?q=" + strUser + "&p=" + strPsswrd, true);
                xmlhttp.send();
            }
    }
 }

and this goes to the loginUser php file

<?php
    $q = $_GET["q"];
    $p = $_GET["p"];

    $dbc = mysqli_connect("localhost", "lucy", "abc123", "userDB");
    if(mysqli_connect_error())
    {
        echo "Database cannot be connected", mysqli_connect_error();
        exit();
    }

    $query = "select * from users where (userEmail = '$q'and userPassword = SHA('$p'))";
    $result = mysqli_query($dbc, $query);
    $num = mysqli_num_rows($result);

    if($num != 0)
    {
        $row = mysqli_fetch_array($result, MYSQLI_ASSOC);

        $_SESSION ['userName'] = $row['userEmail'];
        $name = $row['userEmail'];

        setcookie ("dbMember", $name, time() + 60*60*2, "/"); //last 2 hours

        $login = "true";
        echo $login;
    }
    else
    {
        echo "Username or Password is incorrect. Please try again.";
    }
?>

if user info matches with the database it will pass 'true' back to login page, then will reload the index page.

<?php
    //This is the main page for the site.
    include("includes/main_modal.php");
?>
<?php
if(isset($_SESSION['userName']) && isset($_COOKIE['dbMember']))
{
    $user = $_SESSION['userName'];
    echo $user;

}
        else {
            echo "goback";
        }
?>

It runs the index page as soon as user loges in but the session doesn't start and I don't know what I am doing wrong. main_modal.php has session_start(); at the very top of the page. Thank you in advance.

  • 写回答

1条回答 默认 最新

  • dongyou26216708 2018-05-20 11:42
    关注

    Did you using session_start(); before you set value of session.

    for example:

    <?php
        session_start();
    
        $q = $_GET["q"];
        $p = $_GET["p"];
    
        $dbc = mysqli_connect("localhost", "lucy", "abc123", "userDB");
        if(mysqli_connect_error())
        {
            echo "Database cannot be connected", mysqli_connect_error();
            exit();
        }
    
        $query = "select * from users where (userEmail = '$q'and userPassword = SHA('$p'))";
        $result = mysqli_query($dbc, $query);
        $num = mysqli_num_rows($result);
    
        if($num != 0)
        {
            $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
    
            //set session 
            $_SESSION ['userName'] = $row['userEmail'];
            $name = $row['userEmail'];
    
            setcookie ("dbMember", $name, time() + 60*60*2, "/"); //last 2 hours
    
            $login = "true";
            echo $login;
        }
        else
        {
            echo "Username or Password is incorrect. Please try again.";
        }
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?