【问题标题】:Adding variables to $_SESSION将变量添加到 $_SESSION
【发布时间】:2011-11-28 18:47:24
【问题描述】:

我现在有一个基本的登录脚本。

用户登录时定义了2个变量:

$_SESSION['user_id'] = $user['user_id'];
$_SESSION['username'] = $user['username'];

index.php 文件有这个

session_start();
if(array_key_exists('user_id', $_SESSION) && array_key_exists('username', $_SESSION)):

这一切都很好,但是一旦会话开始,我想从数据库中添加更多值,所以我在这里有这个代码:

$res = mysql_query($sql);
$_SESSION = mysql_fetch_assoc($res);

当我这样做时,它会覆盖 $_SESSION['user_id'] 和 $_SESSION['username']。 我试过这个:

$_SESSION .= mysql_fetch_assoc($res);

但是没有用。

有人有什么想法吗?

谢谢 彼得

【问题讨论】:

  • 我想补充一点,这是一个坏主意。您应该只将用户 ID 存储在会话中,因为用户名、角色、电子邮件等可能会在某些时候发生变化。最好在每个页面上加载需要的内容。
  • 如果我这样做,那么网站会变慢,因为它每次都加载大量数据。除非用户更改,否则此数据库上的数据不会更改,当用户更改其帐户信息时,$_SESSION 变量将被重新定义

标签: php mysql session


【解决方案1】:

$_SESSION 是一个数组。您正在覆盖整个 $_SESSION 变量。改为这样做:

$_SESSION['data'] = mysql_fetch_assoc($res);

http://us2.php.net/manual/en/session.examples.basic.php

【讨论】:

    【解决方案2】:

    这是因为您将变量$_SESSION 的值设置为mysql_fetch_assoc($res); 的返回值。

    你想要做的是$_SESSION['query_result'] = mysql_fetch_assoc($res)。如果您只想将数据库结果的单列添加到会话中,您可以这样做:

    $res = mysql_query($sql);
    $data = mysql_fetch_assoc($res);
    $_SESSION['myKey'] = $data['myKey'];
    

    【讨论】:

      【解决方案3】:

      尝试合并数组

      $res = mysql_query($sql);
      $_SESSION = array_merge(mysql_fetch_assoc($res), $_SESSION);
      

      http://php.net/manual/en/function.array-merge.php

      【讨论】:

      • 切换数组合并参数的顺序以避免覆盖$_SESSION中以前的值。
      【解决方案4】:

      函数 mysql_* 将来会被弃用和删除,建议使用 PDO 或 MySQLi。

      一些主机已禁用这些功能。

      【讨论】:

      • 这是 2 年前问的 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多