【问题标题】:How to adapt my PHP Session into an Array如何将我的 PHP 会话调整为数组
【发布时间】:2013-11-08 11:11:35
【问题描述】:

我有这个 PHP 代码,我用它来触发用户登录。为了成功登录,用户使用他们注册的电子邮件和密码。我当前的 PHP 代码允许在使用 $_SESSION['loggedin'] = $dbusername 的任何页面上回显用户名。我现在要做的是调整这个 PHP 代码以将一个数组放入“登录”会话中。我希望数组保存用户注册详细信息,即名字、姓氏、公司和电子邮件,以及他们的用户名(dbusername)。这是为了让我能够在“用户帐户页面”上回显此类详细信息

我的代码:

<?php

session_start();

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

if ($email&&$password)
{
$connect = mysql_connect("*****","***","**********") or die ("Login failed!");
mysql_select_db("dbname") or die ("Could not connect to Database"); 

$query = mysql_query("SELECT * FROM regusers WHERE email='$email'");

$numrows = mysql_num_rows($query);

if($numrows !=0)

{
while ($row = mysql_fetch_assoc($query))

{
$dbemail = $row['email'];
$dbpassword = $row['password'];
$dbusername = $row['username'];

}
if ($email==$dbemail&&$password==$dbpassword)

{
include 'loginIntro.php';
$_SESSION['loggedin']=$dbusername;

}

else
echo "Incorrect Password";

}

else
die ("That email doesn't exist");

}

else
die ("Enter a registered email and password");

?>

然后在我的“用户帐户页面”上我有这个:

<?php

session_start();
$dbusername = $_SESSION['loggedin'];

?>

为了回显用户名,这个 PHP 代码可以正常工作,因为我所要做的就是:任何时候我想显示用户名。所以回到我原来的问题 - 请传授必要的知识来调整这个 PHP 代码来保存用户注册详细信息,这样我就可以在任何使用相关会话的页面上回显这些详细信息。请原谅我缺乏知识和理解,我已经抓狂了,以至于我有摇篮帽-只有婴儿才能得到,但在这个 PHP 游戏中,我是​​一个胚胎。感谢您提供任何帮助

【问题讨论】:

  • 拜托,请散列您的密码……没有人喜欢以原始文本存储密码的网站……
  • 您的会话对象已经是一个数组...:$_SESSION = array_merge($_SESSION, $row);
  • 那么您的实际问题是什么……?如果您不知道如何使用数组,请阅读手册。
  • 小心 SQL 注入,mysql_* 已弃用!谷歌 PDO 并阅读 php.net/manual/en/pdo.prepared-statements.php

标签: php mysql arrays session


【解决方案1】:

$_SESSION 是一个数组

您可以简单地在其中保存一个关联数组。

$_SESSION['id'] = $x;
$_SESSION['username'] = $y;
$_SESSION['realname'] = $z;

或嵌套数组

$_SESSION['user']['id'] = $x;
$_SESSION['user']['username'] = $y;
$_SESSION['user']['realname'] = $z;

小心

  • 您正在使用已弃用的函数。
  • 没有对通过的数据进行验证。
  • 存在 SQL 注入的风险(看起来像 100%)。
  • 正如 bwoebi 所说,您不能以明文形式保存密码。

推荐阅读

【讨论】:

    【解决方案2】:

    如果你想使用一个 Array 作为 Session 变量,你必须先序列化它。 (http://php.net/manual/en/function.serialize.php)。

    然后您可以将其添加到 $_SESSION,并在其他页面上反序列化 (http://php.net/manual/en/function.unserialize.php)。

    现在这里有两个建议:使用 sha1 (http://us2.php.net/manual/en/function.sha1.php) 对您的密码进行哈希处理,并且不要使用已过时的 mysql_* 函数。考虑使用 mysqli 或 PDO。

    【讨论】:

    • 为什么会有序列化的开销?你可以这样做:$_SESSION = array_merge($_SESSION, $row);
    • 不要使用 sha1 对密码进行哈希处理,使用更安全的东西,例如 PHP5.5 中的新内置 password 函数或在早期版本的 PHP 中等效的 password_compat ( > 5.3.7)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多