【问题标题】:Using session cookies to make a form's comfirmation page URL unshareable使用会话 cookie 使表单的确认页面 URL 不可共享
【发布时间】:2012-11-20 17:20:41
【问题描述】:

我有一个名为 form.html 的表单,当用户提交它时,它会跟随到 comformation.html。

但是,我不希望用户能够获取 comfirmation.html 页面 URL 并分享它(例如推特)

这可以通过在 form.html 中设置一个会话然后在 comfirmation.html 页面上进行某种检查以查看它是否存在来实现吗?

因此,如果其他人直接单击指向 comfirmation.html 的链接,那么他/她将被重定向到表单。

我认为这是可能的,因为我在谷歌搜索时看到了一些例子。但是我还没有看到任何会话检查重定向到另一个页面的示例(或者如果会话匹配,则什么也不做)。

谢谢,

劳伦斯

【问题讨论】:

标签: javascript session-cookies


【解决方案1】:

如果在confirmation.html中添加这样的代码呢?

var prevStage = "http://mysite.com/form.html";
if(prevStage != document.referrer) {
    window.location.href = prevStage;
}

【讨论】:

  • 嗨,如果我有两个可能的先前页面怎么办?我可以添加 prevStage2 并在下面的位中使用 OR 运算符吗?
  • 当然可以,为什么不呢?您还可以检查每个步骤的上一阶段,以确保用户从上一阶段进入特定阶段。
  • 嗨,我现在遇到了一些问题,因为之前的页面可能包含附加到 URL 的动态值(如会话 ID)。所以我一直在尝试将检查基于域。但这似乎不起作用:var url = "mysite.com"var login = "mysite.com/login.html"var referrer = document.referrer.match(/:\/\/(.[^/]+)/)[1];if(url !== referrer ) {`window.location.href = login;`}这里的想法(从另一个帖子复制而来)是推荐人由查看上一页的 URL,但删除了除域之外的所有内容。
  • 对此评论格式错误表示歉意。看来我不能硬回报。
  • document.referrer 返回用户来自的页面的 URL 或 undefined 如果他在浏览器的新窗口/标签中打开该页面。所以这个想法是用户访问了http://site.com/stage1.html,并被重定向到stage2.html,你正在检查的引荐来源网址是否等于http://site.com/stage1.html URL等等。
【解决方案2】:

我认为你可以这样做......

<html>
<head>
<script>


/* getUrlVars function from http://papermashup.com/read-url-get-variables-withjavascript/
*/
function getUrlVars() 
{
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
        vars[key] = value;
    });
    return vars;
}


/*
* getCookie and checkCookie function 
* credit http://www.w3schools.com/js/js_cookies.asp
*/

function getCookie(c_name)
{
    var i,x,y,ARRcookies=document.cookie.split(";");
    for (i=0;i<ARRcookies.length;i++)
    {
        x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
        y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
        x=x.replace(/^\s+|\s+$/g,"");
        if (x==c_name)
            {
                return unescape(y);
            }
    }
}


function checkCookie()
{
    var getConfirmationID = getUrlVars('confirmationid'); 
    var confirmation =getCookie(getConfirmationID);
    if (confirmation!=null && confirmation!="")
    {
        alert("Page expired, redirecting....");
        window.location = "/originalForm.html";

    }
    else
    {
        /*
        * show the confirmation
        */
        document.getElementById('confirmationdata').innerHTML = '<p>'+confirmation+'</p>';

    }

  }
}
</script>
</head>
<body onload="checkCookie()">
    <div id='confirmationdata'></div>
</body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多