【问题标题】:Protect download path with PHP Sessions/Cookies?使用 PHP 会话/Cookie 保护下载路径?
【发布时间】:2015-08-15 05:11:02
【问题描述】:

在转到产品下载页面之前,我需要确保有人已经填写并填写了注册表。现在我通过 ajax 提交表单,如果返回的 JSON = 成功,我会相应地重定向到相应的下载页面。我想保护下载页面不被直接访问,以确保我们首先获得领先优势。我知道可以操纵 PHP 会话和 cookie,但它符合我们的需求,我知道后果等,只需要完成这项工作。

所以在“http://www.example/register.php”页面上,我想根据当前时间设置和散列一个 cookie:

<php 
    $time = ('Y-m-d H:i:s');
    //set a new cookie with this value and hash it
?>

然后在http://www.example.com/download.php检查cookie,如果设置并在最后一小时内设置,则显示下载内容,如果未设置或已过期,则重定向回注册页面

<php
    if !$cookie or expred {
        location('http://www.example.com/register.php');
        die();
    } else {
      //download content
    }
?>

我知道这个例子非常粗略,但我可以在正确的道路上使用一些帮助。我很欣赏它!

【问题讨论】:

    标签: php cookies session-cookies


    【解决方案1】:

    您需要在每个页面的顶部使用session_start(),否则您将无法读取或写入任何会话数据。

    完成此操作后,您将更改 $_SESSION 全局中的会话变量。要设置时间,请尝试$_SESSION['time'] = time()。这将以秒为单位保存当前时间(Unix 时间戳)。要计算时间是否设置为大于一小时前,请使用:

    session_start();
    // 60 seconds * 60 minutes = 3600, or 3600 = seconds in an hour
    if(time() - $_SESSION['time'] > 3600) {
        // Current time - survey_time is greater than one hour (expired)
        header('Location: /survey/page/url/');
    } else {
        // Not expired - do stuff
    }
    

    如果您有任何问题,请告诉我!

    【讨论】:

    • 感谢您的帮助!我现在按要求工作了。我将 session_start() 和 $_SESSION['time' = time() 移动到一个单独的文件中,然后在我的表单提交的成功处理程序中我 $.post 到该文件以启动会话,因此它仅在成功后有效表单提交。最后一个问题,因为有多个 ajax 提交将启动会话,我如何清除所有会话然后开始一个新会话?
    • @DirtyBirdDesign session_start() 有点欺骗性,如果该用户存在会话,它将启动会话或获取现有会话。我认为默认情况下它们会在 30 分钟不活动后过期。所以每个页面实际上都在使用相同的会话(对于那个用户)。如果您想强制一个新会话,您可以使用session_destroy()(首先使用 session_start),但这确实是为注销页面而设计的。希望对您有所帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2017-12-01
    • 2012-04-19
    • 2019-10-02
    • 2012-07-27
    • 1970-01-01
    • 2014-05-27
    相关资源
    最近更新 更多