Php用户登录会话

时间:2014-02-07 12:18:20

标签: php session login

注册和登录部分工作正常但是当用户登录时,标题上的欢迎消息仍然是“欢迎客人”。我在创建会话或调用会话时遇到错误,我无法理解。

loginCheck.php

session_start();
include ("connection.php");

if(isset($_POST["username"], $_POST["pw"])){

    $username = mysql_real_escape_string($_POST["username"]);
    $pw = mysql_real_escape_string(md5($_POST["pw"]));

    $sql = mysql_query("SELECT * FROM uye WHERE kullanici_adi = '$username' AND sifre = '$pw'");

    if(mysql_num_rows($sql) == 1){

        $_SESSION["loggedIn"] = 1;
        $_SESSION["username"] = $username;
        die("ok");
    }
    else{
        $_SESSION["loggedIn"] = "";
    }
}

的header.php

<?php
session_start();
include ("connection.php");
include ("html.php");
include ("login.php");
include ("signup.php");

?>
<body background="images/wallpaper-703170.jpg" class="background">
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
    <ul class="nav navbar-nav">
        <a class="navbar-brand" href="/KacYakiyor/home.php">Kaç Yakıyor</a>
    </ul>
    <ul class="nav navbar-nav navbar-right">
        <p class="navbar-text" id="welcome">
<?php

   if (isset($_SESSION['loggedIn']) && $_SESSION['loggedIn'] == 1) {

      echo "Hoşgeldin" . $_SESSION['username'] . "!";
   }
   else{
      echo "Hoşgeldin Ziyaretçi";
   }
?>
        </p>
        <li><a data-toggle="modal" href="#loginModal" id="login">Giriş</a></li>
        <li><a data-toggle="modal" href="#signupModal" id="signup">Üye Ol</a></li>
    </ul>
</div>

更新:似乎问题是会话无法将一个页面传递给另一个页面。众所周知,这个问题是一个session_start()问题,但我认为我把它们正确放置了。

4 个答案:

答案 0 :(得分:2)

session_start();放在标题的顶部,必须在您希望会话数据存在的每个页面上设置session_start();,并且它必须是在任何输出之前调用的第一个函数,因为这个函数会发送HTTP头。

答案 1 :(得分:1)

在loginCheck.php中,您可以尝试将两个条件之间的逗号更改为&amp;&amp;并看看它是否有效?

而不是

if(isset($_POST["username"], $_POST["pw"])){
     .....
}

尝试;

if(isset($_POST["username"]) && isset($_POST["pw"])){
     .....
}

答案 2 :(得分:0)

检查你的病情。从您的代码中看,条件似乎返回false,从而将您重定向到其他位置。

答案 3 :(得分:0)

session_start();
include ("connection.php");

if(isset($_POST["username"], $_POST["pw"])){

    $username = mysql_real_escape_string($_POST["username"]);
    $pw = mysql_real_escape_string(md5($_POST["pw"]));

    $sql = mysql_query("SELECT * FROM uye WHERE kullanici_adi = '$username' AND sifre = '$pw'");

    if(mysql_num_rows($sql) == 1){
        $_SESSION["loggedIn"] = 1;
        $_SESSION["username"] = $username;
        die("ok");
    }
    else{
        $_SESSION["loggedIn"] = "";
    }
}else{
  $_SESSION['dummy'] = "dummy here";
}

尝试在logincheck.php和你的其他文件中执行此操作,在任何if语句之前执行print_r($ _ SESSION)。如果打印出假人,那么你正在做错误的if语句,因为我怀疑这条特定的行:

if(isset($_POST["username"], $_POST["pw"])){

试试吧

if(isset($_POST["username"] && $_POST["pw"])){