2012-02-01 67 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。如果你没有看到这个,那么你的会话没有启动。祝你好运!