2012-02-01 64 views
1

可能重複:
PHP session seemingly not working

我目前編碼我自己的CMS的樂趣,但是當我使用$ _SESSION,這是行不通的。這次會議沒有保存......

有我的代碼:

<?php 
include('header.php'); 
if (isset($_SESSION['logged_in'])) 
{ 
    $link = 'profile.php'; 
    $link_name = 'Profile'; 
} 
else 
{ 
    $link = 'login.php'; 
    $link_name = 'Login'; 
} 

if (isset($_POST['action'])) 
{ 
    $username = mysql_real_escape_string($_POST['username']); 
    $password = mysql_real_escape_string($_POST['password']); 
    $password = md5($password); 
    $user = mysql_query("SELECT * FROM users WHERE `username`='".$username."'"); 
    if (mysql_num_rows($user) == 1) 
    { 
      while ($userinfo = mysql_fetch_array($user)) 
      { 
        if ($userinfo['banned'] != true) 
        { 
          $_SESSION['user_id'] = $userinfo['id']; 
          $_SESSION['username'] = $userinfo['username']; 
          $_SESSION['logged_in'] = "true"; 
          header('Location: index.php'); 
        } 
        else 
        { 
          header('Location: login.php?error=banned'); 
        } 
      } 
    } 
    else if (mysql_num_rows($user) == 0) 
    { 
      header('Location: login.php?error=not-found'); 
    } 
} 
?> 

在代碼中,我得到了我的數據庫中的用戶信息,然後我檢查,如果用戶沒有被禁止。如果沒有,我把我的$ _SESSION []和我重定向到家...

+3

除非它在'header.php'中,否則你省略了'session_start()'。在訪問或設置'$ _SESSION'中的任何內容前,您必須調用它,在訪問'$ _SESSION'的每個腳本中。 – 2012-02-01 14:44:03

+0

你有session_start();在每個頁面的頂部? – dSquared 2012-02-01 14:45:33

+0

@Michael它在'header.php'中... – 2012-02-01 14:45:42

回答

10

你首先需要session_start()

+0

我需要'session_save()'嗎? – 2012-02-01 14:48:06

+2

PHP中沒有這樣的功能。 – spidEY 2012-02-01 14:56:44

+0

@Frederick:會話,如果_start()'d,將在腳本退出時自動保存。你可以用'session_write_close()'強制保存,但是如果你做了任何修改,那麼這會阻止自動保存 - 你必須再次使用session_start()重新打開它。 – 2012-02-01 14:58:34

4

您應該在腳本的開頭調用session_start()。確保你在每個頁面上調用它,你需要訪問會話變量以及

1

確保session_start()被調用。使用防篡改數據檢查發送和接收請求的標題。您從服務器上查找Set-Cookie Header和客戶端的Cookies Header。這應該包含您的PHPSESSID。如果你沒有看到這個,那麼你的會話沒有啓動。祝你好運!