我需要PHP会话的帮助

时间:2010-10-01 21:31:32

标签: php session

我想为每个用户创建一个个性化的仪表板,并创建了一个登录系统。

我正在使用此代码将不同用户重定向到不同的页面,但无论用户名或密码是什么,都会将我带入file1.php。

<?php
session_start();

if ($_SESSION['username'] == "google") {
    header("location:file1.php");
}
else if ($_SESSION['username'] == "apple") {
    header("location:page2.php");
}
else {
    header("location:default.php");
}
?>

此处,Apple和Google是用户名。

以下是设置会话数据的代码。

$connect = @mysql_connect ($host, $username, $password) or die ('error');
$select = @mysql_select_db($db_name, $connect) or die('check');
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM $tbl_name WHERE username='$username' and password='$password' ";
$result = mysql_query($sql);
$count = mysql_num_rows($result);
if($count==1) {
    session_register("username");
    session_register("passsword");
    header("location:dashboard.php");
} else {
    echo "Username/Password does not match. Try Again.";
}

<?php

$host = "localhost";
$username = "USERNAME OF PHPMYADMIN";
$password = "PASS OF PHPMYADMIN";
$db_name = "membership";
$tbl_name = "users";

$connect = @mysql_connect ($host, $username, $password) or die ('error');
$select = @mysql_select_db($db_name, $connect) or die('check');

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

$sql = "SELECT  * FROM $tbl_name WHERE username='$username' and password='$password' ";

$result = mysql_query($sql);

$count = mysql_num_rows($result);

if($count==1) {
    session_register("username");
    session_register("passsword");
    header("location:dashboard.php");
}
else
{
    echo "Username/Password does not match. Try Again.";
}


?>

这是我正在使用的其他代码。

5 个答案:

答案 0 :(得分:3)

您在查询用户名的页面上不需要session_start();吗?

假设此代码位于单独的页面中。

<?php

session_start();

$connect = @mysql_connect ($host, $username, $password) or die ('error');
$select = @mysql_select_db($db_name, $connect) or die('check');
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM $tbl_name WHERE username='$username' and password='$password' ";
$result = mysql_query($sql);
$count = mysql_num_rows($result);
if($count==1) {
    session_register("username");
    session_register("passsword");
    header("location:dashboard.php");
} else {
    echo "Username/Password does not match. Try Again.";
}
?>

答案 1 :(得分:1)

确保你使用两个=符号。一个人将分配而不是eval。

也会切换更好

开关($ _SESSION ['username']){
    案件'谷歌':
        $文件= 'file1.php';
        打破;
    案件'谷歌':
        $文件= 'file2.php';
        打破;
    默认:
        $文件= '如default.php';
        打破;
}
header(“location:$ file');

答案 2 :(得分:0)

尝试在会话变量上执行print_r,可能会出现其他会话问题。

<?= print_r($_SESSION['username']) ?>

答案 3 :(得分:0)

首先,你真的不应该以明文形式在数据库中存储密码。至少,md5()他们或其他什么。

其次,你应该转义你放入SQL查询的值(或者更好的是,使用MySQLi的预准备语句,如果你的服务器启用了MySQLi),以避免SQL注入。

第三,调试语句确实很奇怪。您是否尝试在有条件之前立即打印出$_SESSION['username']的值?我很难相信PHP的条件处理或相等测试会搞砸,因此由于某种原因,值必须是“google”。我认为您需要在代码中跟踪$_SESSION['username']的分配,以尝试找出原因。

答案 4 :(得分:0)

在将用户名和密码放入会话之前,您应该调用session_start(),并且不应该使用session_register()(因为它已被弃用),只需使用$_SESSION全局,如此< / p>

session_start();
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;

然后在下一页上执行start_session()var_dump($_SESSION);,您可以看到会话中设置的内容