【问题标题】:I need help with PHP sessions我需要 PHP 会话方面的帮助
【发布时间】:2010-10-01 21:31:32
【问题描述】:

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

我正在使用此代码将不同的用户重定向到不同的页面,但无论用户名或密码是什么,它都将我带到 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.";
}


?>

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

【问题讨论】:

  • 我看不出条件句有什么问题。 设置用户名的代码是否可以在不应该运行的时候运行?
  • 我不太清楚你的意思。这是其他代码的代码-
  • $connect = @mysql_connect ($host, $username, $password) or die ('error'); $select = @mysql_select_db($db_name, $connect) 或 die('check'); $username = $_POST['username']; $password = $_POST['密码']; $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("用户名"); session_register("密码");标头(“位置:dashboard.php”); } else { echo "用户名/密码不匹配。再试一次。"; }
  • 我希望它从我的数据库中检查,然后如果用户名是 apple,则将其重定向到 file1.php,如果 google 到 page2.php......
  • 您还真的需要验证输入如果我输入了 bye';从用户名 密码的 tbl 中删除;作为我的密码?

标签: php session


【解决方案1】:

您在查询用户名的页面上不需要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.";
}
?>

【讨论】:

    【解决方案2】:

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

    切换会更好

    switch ($_SESSION['username']) {
    案例“谷歌”:
    $file='file1.php';
    休息;
    案例“谷歌”:
    $file='file2.php';
    休息;
    默认值:
    $file='default.php';
    休息;
    }
    header("位置:$file');

    【讨论】:

    • 我插入了两个 = 符号。无论用户名是什么,您的代码都会将我带到 default.php
    • 那么您没有持久会话。检查您的服务器配置。
    • 您可以使用以下方法进行测试:$a = session_id(); if ($a == '') session_start();回声$a;多次重新加载该页面并查看 sessionid 是否更改
    【解决方案3】:

    尝试在会话变量上执行 print_r,您的会话可能存在其他问题。

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

      • 嗨,戴夫,感谢您发布此消息。此代码有效,在 var_dump 所在的下一页上,我收到一条消息,例如数组用户名 google,密码 -----。所以谢谢你。当我现在发布重定向不同用户的条件时,它仍然将我重定向到 file1.php。谢谢。
      【解决方案5】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-15
        • 2017-05-03
        • 1970-01-01
        • 1970-01-01
        • 2011-05-31
        相关资源
        最近更新 更多