我正在努力完成我目前正在创建的这个网站,但我有点卡住了。
我想在数据库中创建一个名为"订单"的表。我希望这个表与我的users表相关,这样当用户转到他的"orders.php"页面(一旦登录)时,他就会看到他所有的当前和以前的订单。
这些将是我的表格字段/列:
id用户名定单号描述量总
这是我的方法:
每当创建新订单时,根据用户的选择(为订单选择的内容)插入所有表字段/列,但用户名将是从保存用户名的$_SESSION或$_COOKIE变量中收集的唯一值。然后,一旦用户转到orders.php,我将执行一个查询,以显示只有该用户名订购的所有订单。请注意,我确实对所有输入/输出进行了消毒,并且我不会在cookie中存储敏感数据。我的系统设计为只使用会话作为身份验证方法,因此每次关闭浏览器时都需要登录,但这没关系。
1) 这是一种安全的方法吗?你有什么建议/意见吗?
2) 你能帮我构造查询吗?
我还没有真正使用过关系数据库,所以我有点迷失了方向。如何调用表"orders"中的所有订单,其中username="username from the session"?
到目前为止,我有这个:
"SELECT * FROM orders WHERE username = ? " //(Using PDO)
我知道这会起作用,但我担心的是,如果会话被劫持或类似的事情发生,那么用户是否能够检索到任何用户的订单?
谢谢你进一步解释并帮助我!
干杯!
小心!请不要创建包含人类可读用户id的纯文本cookie(如user2345995
或OllieJones
)。坏人很容易通过猜测来伪造这样的cookie,然后你的用户信息就会泄露出去。
您正在php中工作。因此,您可以使用php的会话机制来存储您的userid和其他值。php使用难以猜测的会话ID(SID),并将它们存储在cookie中或作为URL中的sid=1234abcd9875
参数。
为了您的系统的完整性,请阅读这篇文章。事实上,这是一个精心设计的功能,它已经在野外使用了十五年左右:它已经被调试过了。
http://php.net/manual/en/session.idpassing.php
如果您使用的是会话系统,那么您基本上是在您的第一个页面,即登录页面中执行此操作的。
session_start();
...
$_SESSION['username'] = $username; /* which you get by logging in */
...
在订单查找页面上,您可以执行类似的操作来检索用户名并在查询中使用它。
session_start();
...
$orderstmt = $pdoconn->prepare("SELECT * FROM orders WHERE username = :username");
$orderstmt->execute( array(':username' => $_SESSION['username']) );
...
while ($row = $orderstmt->fetch()) {
/* use the row's data */
}
$orderstmt->closeCursor();