我正在编写一个使用几个不同表格的php / mysql应用程序。
表1存储用户信息(名称电子邮件等),表2存储用户窗口小部件,表3存储这些个别窗口小部件的配置。
我现在这样做的方式是,表1有一个自动增量键,用于识别特定用户。当他们访问表2时,它会创建一个包含该表自己的密钥ID的行,以及表1中该特定用户的“uid”(密钥ID)。当用户想要为其小部件设置设置时在表3中,它存储了我称之为“cxid”或config xid的内容,它是表2中唯一的小部件ID。
这样做的目的是限制哪些用户看到小部件,并且显然将配置用于配置目的。
问题是,当我调用个人小部件时,它会传递URL中的uid。这显然是一个安全问题,因为您可以更改它并查看其他人的小部件。但我甚至不想让任何人知道这是怎么做的。有没有办法在不使用URL的脚本之间传递变量,还没有使用表单?
答案 0 :(得分:5)
是的,您可以使用sessions。
基本上,您将有关用户的所有必要信息存储到$_SESSION
,并在每次加载页面时检索它。
例如,在第一页加载:
session_start();
$_SESSION['uid'] = 123;
默认情况下,用户会收到一个标识会话的cookie,但不包含其他信息。
在第二页加载时,您可以调用:
session_start();
$x = $_SESSION['uid'];
//$x is now 123
//run a query here!
session_start()将读取用户的Cookie,查找会话信息(默认情况下存储在临时文件位置),并使用上次查看时存储的信息填充$_SESSION
。
答案 1 :(得分:2)
可以使用会话在PHP页面之间传递信息,但从用户获取信息的唯一方法(即,他们想要查看哪个widget / cxid)是通过表单帖子或URL,方式你现在正在做。
在显示用户要求的小部件之前,您确实需要进行适当的检查。
首先,在zombat已写入的情况下将userID存储在会话中。
然后你可以做类似的事情:
$result = mysql_query("SELECT cxid, uid FROM table2 WHERE cxid = '42'");
$row = mysql_fetch_row($result);
if ($_SESSION['uid'] == $row['uid'])
{
// display widget info
}
else
{
echo 'Sorry you can only view your own widgets!';
}