【问题标题】:How to start a session for userid如何为用户 ID 启动会话
【发布时间】:2014-10-16 08:29:57
【问题描述】:

我希望我的用户输入 mysite.com/earth.php,earth.php 将向我的数据库发送一条 sql 代码,用于更新用户表中的一列。所以,我希望进入该页面的用户在数据库中为进入的用户将这个值http://prntscr.com/4wet3o“-1”更改为“3”。不适合所有人,只适合进入的用户。但它不起作用,因为 earth.php 必须找到用户 ID,但它没有找到它?我需要开始一个会话吗?我的数据库中有一个会话表,看起来像这样 http://prntscr.com/4wev2k 有帮助吗?

用户必须登录才能进入 Earth.php 编辑:

<?php
    error_reporting(E_ALL);
ini_set('display_errors', '1');

    session_start();

$_SESSION['id'] = 2; //Or a valid user ID

    $verbindung = mysql_connect("localhost","root","*****");
    mysql_select_db("lan");

if(isset($_SESSION['id']))
  mysql_query(sprintf("UPDATE users SET ally='3' WHERE id='%s'", $_SESSION['id']));  
}

     ?>

【问题讨论】:

  • 请分享更多用于登录的代码 ....
  • mysql_* 已弃用,请使用 PDO

标签: php mysql sql session


【解决方案1】:

所有使用 SESSION 对象的页面顶部都应该有session_start();。确保首先检索用户 ID 的页面是使用 $_SESSION['id'] = $id; 将其存储在会话中的页面。

然后在 Earth.php 上,您只需$id = $_SESSION['id']; 从会话中检索它。无需调用session_write_close(); 函数。

【讨论】:

  • 您是否有一个单独的页面,用户首先在其中输入他们的 ID 或姓名或其他内容?
  • 登录时输入自己的名字
  • 因此登录页面需要是在会话对象中设置 id 的页面。那么earth.php只需要从$_SESSION['id']中检索
【解决方案2】:

在我看来逻辑不正确,因为:

  1. 以下几行什么都不做

    $id = $_SESSION['id']; $_SESSION['id'] = $id;

  2. 在会话关闭后尝试写入会话将失败

    session_write_close(); $_SESSION['id'] = $id;

  3. 以下可能会返回错误

    if(isset($_SESSION['id']))

改用

if($id) { ... }

---根据更改的来源添加----

替换

mysql_query("UPDATE users SET ally='3' WHERE id='$_SESSION['id']'");

mysql_query(sprintf("UPDATE users SET ally='3' WHERE id='%s'", $_SESSION['id']));  

【讨论】:

  • 哦,你能帮我编辑一下代码吗,或者你能解释一下我应该在哪里使用 if($id) { ... }
  • 我在我的问题上编辑了我的earth.php,你可以看一下
  • 应该没问题。但请记住,在 $_SESSION['id'] = 2; 之后if(isset($_SESSION['id'])) 永远为真
猜你喜欢
  • 2016-09-25
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 2015-12-14
相关资源
最近更新 更多