$ _SESSION的临时变量?

时间:2012-08-29 21:19:09

标签: php mysql web-applications

用户故事:

我是网络应用程序的管理员,我需要删除该网络应用程序的其他用户。我从用户列表中选择用户,然后可以从后续页面中删除用户。

当前(错误)解决方案:

现在我将用户即将删除的ID /主键存储在隐藏的表单元素中(可怕,可怕,可怕,我知道 - 有人可以使用元素检查器删除任何用户......)。对于这样的事情,最好的做法是什么?我是否将要删除的用户的ID /主键保存为$ _SESSION变量?一块饼干?一个哈希的URL并用$ _GET?

抓住它

修改

有不同的用户组,由不同的管理员管理。 A组的管理员不了解B组(及其用户)等。所有用户都在一个表中,所有用户可以在任意数量的组中。我需要保护用户的ID并远离DOM,以便有人无法改变它并删除他们没有管辖权的用户。

3 个答案:

答案 0 :(得分:1)

没有必要使用$_SESSION来完成这样的任务:会话用于维护页面之间的状态,这里没有这样的情况。

处理资源[例如用户]时的最佳做法是设置RESTful environment

虽然您还没有设置此类系统,但您仍然可以利用$_GET$_POST php数组的HTTP请求:

<form action="delete.php" method ="post">
    <select id="user" name="user">
        <option value="1">Joh Doe</option>
        <option value="2">Jane Doe</option>
        <option value="3">Dun No</option>
    </select>
    <input type="submit" value="Submit"/>
</form>

当您提交此表单时,您向POST发出delete.php个请求,$_POST数组将包含一个具有所选值的user个键 - 然后您就可以删除用户通过这样的密钥,使用PDO编写的语句。

反对拒绝删除权限,你必须设置脚本以阻止请求,如果记录的用户没有足够的权限 - 这是你必须正确设置的另一层,所以我建议你使用框架[如{{ 3}}或YII]因此您可以利用其安全组件。

隐藏的领域想法落后于Symfony,所以它根本没有意义 - 是的,它依赖于会话。

答案 1 :(得分:1)

我只是确保在删除用户时验证用户权限。

写作例如很好函数isUser()用于检查会话/ cookie中的数据,如果您被置入,则返回true,然后您也可以访问var,表明您作为用户的权限。此外,当您检查数据是否正常并且您实际上已使用正确的数据登录时,您可以生成$ user_rights var,其中包含站点访问级别(等)。

然后简单地说:

if(isUser() and $user_rights == 9) { /* code here, 9 is e.g. admin right */ } 

答案 2 :(得分:0)

会话没有错。会话用于临时存储在1页以上。