【问题标题】:Save to session - Does a cache mean the back end code doesn't always run?保存到会话 - 缓存是否意味着后端代码并不总是运行?
【发布时间】:2009-10-18 09:07:31
【问题描述】:

所以对于一些背景知识,我正在使用 Zend 框架创建一个网站。有一个页面,我正在使用 AJAX 将评分保存到我的数据库中。我显然需要商店的密钥才能知道要为哪个商店保存评级。

为了访问该页面的商店,URL 是 MYSTORE.com/stores/2。 2 是存储键,所以它可以是 13、10 等等。我的 PHP 脚本当前所做的是当它加载页面时,它将 store_id 存储为会话。然后,如果他们对商店进行评分(全部在 JS 中),它将从会话中获取 store_id 值,并将它们组合起来以将插入发送到我的数据库。所以这是我的问题。

在某个地方,我可能想要缓存来为我的服务器节省一些麻烦。我以前从未使用过,并且担心不是运行将 store_id 保存到会话的脚本,而是从缓存加载页面并且从不存储 store_id。这意味着理论上可以将评论保存到错误的商店。这是一个合理的担忧吗?有没有办法解决这个问题?

我的另一个问题是是否有更好的方法来做到这一点。我很犹豫将商店 ID 放入 JS 或 HTML 中,因为(至少我认为)您可以通过 Firebug 或其他 Web 工具弄乱脚本。我希望我的页面是安全的。有没有更好的方法来做到这一点?

希望我的问题有意义,并提前感谢您。

-伊森

【问题讨论】:

    标签: php javascript ajax zend-framework session


    【解决方案1】:

    我的建议是在您遇到问题之前不要解决问题。当他们加载页面时,只需将电影 ID 放在 URL 中,可能带有某种校验和或散列,这样有人就不能只对每个 ID 投赞成票或反对票。

    无需将其存储在会话中。只需将其保存在数据库中,直到您需要更改它。不要忘记会话是基于文件的。使用它们来提高性能有点误导。只需在适当的地方使用它们即可。

    Knuth 说“过早的优化是万恶之源”,这就是我的看法。你是对的,你通过在会话中保留一个 ID 使你的代码变得非常复杂,并且可能与用户看到的内容不同步(例如,使用后退按钮)。把ID贴在网页上,问题就解决了。

    【讨论】:

    • 这是一个公平的观点。这是我的第一个网站。像这样的安全问题值得担心吗?是否有可能会有一些 4channer 来捣乱我的网站,因为他可以?
    • 根据我的经验,你应该假设有人会惹你,所以只需采取一些琐碎的步骤来避免它,比如把 sha1("secret string " + $user_id + " " + $movie_id ) 在投票请求中,然后在收到它时进行检查。
    猜你喜欢
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2018-11-13
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    相关资源
    最近更新 更多