2017-04-14 94 views
1

php會話變量不會從登錄頁面轉到主頁。我可以看到使用正確的值將變量保存在Web服務器上的會話文件中,但第二個頁面沒有看到它們。看起來每次都會開一個新的會話。會話變量不會轉到其他頁面

即使成功登錄後,主頁也會重定向回登錄頁面。我確實看到在這個問題的論壇上有很多問題。但其中大多數都有相同的解決方案。使用session_start()。

我在這兩個頁面上都使用了session_start()。

我的實際計劃是使用MySQL數據庫來保存會話數據。登錄頁面會將會話數據寫入數據庫,但主頁不會讀取它。我正在嘗試使用本地文件來消除數據庫或使用數據庫進行會話管理的代碼的任何問題。我仍然有與本地文件相同的問題。

的login.php

<?php 
session_start(); 
if(isset($_POST['submit'])) { 

//sanitize the data 
$user = htmlspecialchars (stripslashes (trim ($_POST['user']))); 
$password = htmlspecialchars (stripslashes (trim ($_POST['password']))); 
$domain = htmlspecialchars (stripslashes (trim ($_POST['domain']))); 
//validate user account from LDAP. 
//once authorized, assign session variables and redirect to home page. 
$_SESSION['accesslevel'] = "III"; 
$_SESSION['loggedin'] = "true"; 
$_SESSION['user'] = $user; 
$_SESSION['name'] = $name; 
header('location:home.php'); 
?> 
`<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<title>Admin Login</title> 
<link rel="stylesheet" href="css/login.css"> 
</head> 
<body> 
<div class="logincontainer"> 
<div class="login"> 
    <h1>Login</h1> 
     <form action="<?php htmlentities(urldecode($_SERVER['PHP_SELF']));?>" 
method="post"> 
     <p><b></b><input type="text" name="user" value="" placeholder="ADM_5- 
2-1" required autocomplete="off"></p> 
     <p><b> </b><input type="password" name="password" value="" 
placeholder="Password" required autocomplete="off"></p> 
     <p><select name="domain"> 
      <option value="DOMAIN">DOMAIN</option> 
      <option value="domain">NANET</option> 
      <option value="domain">EUNET</option> 
      <option value="domain">APNET</option> 
      <option value="domain">JPNET</option> 
     </select> 
     </p> 
     <p class="submit"><input type="submit" name="submit" value="Login"> 
</p> 
    </form> 
</div> 
</div><br> 
<div class="error"> 
    <?php //print_r($_POST);?> 
    <?php //var_dump($_POST);?> 
    <?php //echo $msg;?> 
</div> 
</body> 
</html> 

home.php

<?php 
session_start(); 
if ((!isset($_SESSION['loggedin'])) or ($_SESSION['loggedin'] != true)) { 
header ("location: login.php"); 
} 

<<<<html (php uses session variable (name) for user profile menu>>>>> 

?> 
+1

'的error_reporting(E_ALL); ini_set('display_errors','1');' – AbraCadaver

回答

-1

在你login.php,更改$_SESSION['loggedin'] = "true";$_SESSION['loggedin'] = true;

+3

是的,你(OP)將這個變量聲明爲「true」作爲一個字符串,然後檢查它是否爲布爾值。一個字符串不是錯的,但它也不是真的。 –

+2

@LouisLoudogTrottier一個字符串_is_真,實際上,除非它是空的。 –

+0

它的尷尬!但對敏銳的眼睛的讚譽。我一直在看我的代碼幾個小時,試圖弄清楚它有什麼問題。 – Ravi