我的会话在本地模式下工作,但在服务器中不工作

时间:2013-04-01 21:11:06

标签: php session login

我有这个PHP代码,这是一个简单的登录系统。

<?php
    session_start();

    // Connecting to DB

    mysql_connect("localhost", "database1", "dbdb1");
    mysql_select_db("dbdb");

    // Getting session info and params AFTER sending POST params

    print_r($_SESSION);

    function doLogin($username_post, $password_post){
        $select_login = "
            SELECT 
                id, 
                username 
              FROM 
                users 
            WHERE 
                username = '$username_post'
                password = '$password_post'
            LIMIT 1";

        $query_login = mysql_query($select_login);
        $rows_login = mysql_num_rows($query_login);

        $array  = mysql_fetch_assoc($query_login);

        if($rows_login>0){

            $_SESSION['user_in'] = True;

            return True;

        }else{
            return False;
        }
    }

    // LOGIN

    $username           = $_POST['username'];                                       
    $password = $_POST['password'];

    if(!empty($username) && !empty($password)){
        doLogin($username, $password);
    }
?>

<!DOCTYPE HTML>
<html>
    <body>
        <form action = "" method = "post">
                <input type = "text" name = "username"/>
                <input type = "password" name = "password" />

                <button type="submit" name = "submit">Login</button>

        </form>
    </body>
</html>

显然,它有效。这段代码在本地模式下工作得很好,但是当我在服务器模式下执行时,我遇到了一个严重的问题,它根本不起作用。如果你看到,我把print_r();在代码中,我放置了它,以便知道会话是否成功发送。在本地模式下,我可以在重新加载后看到发送的参数。在服务器模式下,我看不到它,似乎没有发送会话。

有什么建议吗?这段代码到底发生了什么?我需要知道它为什么在本地模式下工作,而不是在服务器上工作。

PHP SESSION:

session.auto_start  Off Off
session.bug_compat_42   Off Off
session.bug_compat_warn Off Off
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_httponly Off Off
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   Off Off
session.entropy_file    no value    no value
session.entropy_length  0   0
session.gc_divisor  1000    1000
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 5   5
session.hash_function   0   0
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   /var/lib/php/session    /var/lib/php/session
session.serialize_handler   php php
session.use_cookies On  On
session.use_only_cookies    On  On
session.use_trans_sid   0   0

2 个答案:

答案 0 :(得分:0)

我猜你的数据库服务器有相同的数据库,其登录名和数据与本地机器相同?

如果没有从DB返回任何行,则不会设置会话值

答案 1 :(得分:0)

也许您的服务器不支持会话。检查phpinfo()命令并检查是否启用了session support参数,如果已启用,请检查服务器管理员的其他会话参数

编辑1:您应该在条件

之间使用AND
$select_login = "
    SELECT 
        id, 
        username 
      FROM 
        users 
    WHERE 
        username = '$username_post' AND
        password = '$password_post'
    LIMIT 1";