0

我有这个 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.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
4

2 回答 2

0

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

编辑 1:您应该AND在 where 条件之间使用

$select_login = "
    SELECT 
        id, 
        username 
      FROM 
        users 
    WHERE 
        username = '$username_post' AND
        password = '$password_post'
    LIMIT 1";
于 2013-04-01T21:48:04.983 回答
0

我猜您的数据库服务器具有与本地计算机相同的登录名和数据相同的数据库?

如果数据库没有返回任何行,则不会设置会话值

于 2013-04-01T21:14:12.827 回答