替代通过URL传递变量信息

时间:2009-07-26 02:07:06

标签: php mysql

我正在编写一个使用几个不同表格的php / mysql应用程序。

表1存储用户信息(名称电子邮件等),表2存储用户窗口小部件,表3存储这些个别窗口小部件的配置。

我现在这样做的方式是,表1有一个自动增量键,用于识别特定用户。当他们访问表2时,它会创建一个包含该表自己的密钥ID的行,以及表1中该特定用户的“uid”(密钥ID)。当用户想要为其小部件设置设置时在表3中,它存储了我称之为“cxid”或config xid的内容,它是表2中唯一的小部件ID。

这样做的目的是限制哪些用户看到小部件,并且显然将配置用于配置目的。

问题是,当我调用个人小部件时,它会传递URL中的uid。这显然是一个安全问题,因为您可以更改它并查看其他人的小部件。但我甚至不想让任何人知道这是怎么做的。有没有办法在不使用URL的脚本之间传递变量,还没有使用表单?

2 个答案:

答案 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!';
}