cookie和重定向

时间:2011-05-26 17:10:27

标签: javascript asp.net asp.net-mvc

我可以,通过代码(javascript)自动导航到一个网站并让我隐藏的凭据让我进入没有问题(并有cookie)

然而,在我尝试使用(window.open)重定向的下一行代码时,它无法识别我已经获得了cookie然后提示我输入凭据。有什么想法吗?

...
    <form name="MyForm" action="#" method="post">
        <input type="hidden" name="blah" value="blah" />
        <input type="hidden" name="blah" value="blah" />
    </form>
</div>

2 个答案:

答案 0 :(得分:2)

使用JavaScript,我们可以在浏览器窗口之间进行通信,因为我们有对每个窗口的引用。当创建一个新窗口时,JavaScript方法window.open()会返回对新窗口的引用。子窗口也有一个对通过window.opener窗口对象创建它的父窗口的引用。这些引用允许两个窗口相互通信和操作。

为了演示窗口与cookie之间的通信是如何工作的,假设我们想要打开一个窗口,然后在几秒钟后关闭它。 view plainprint?

 1. var win = window.open('child.html');  
 2. setTimeout(function() { win.close(); }, 5000);  

var win = window.open('child.html');
setTimeout(function() { win.close(); }, 5000);

代码将打开一个子窗口,并在5秒后使用对子窗口的引用和方法close()关闭它。但是,如果由于某种原因我们没有引用,我们将无法调用close方法。那么让我们看看如何使用cookie: view plainprint?

 1. window.open('child.html');  
 2. setTimeout(function() { setCookie('child', 'close'); }, 5000);  

window.open('child.html');
setTimeout(function() { setCookie('child', 'close'); }, 5000);

这里我们打开一个窗口,但不保存引用。然后在5秒后我们将'close'写入名为'child'的cookie(使用伪setCookie()函数)。这本身并没有做任何事情,但是如果子窗口期望cookie,它可以在读取'close'时自行关闭。让我们假设以下JS在child.html中。 view plainprint?

1. // child.html  
2. setInterval(function() { getCookie('child') == 'close' ? this.close() : ''; }, 500);  

// child.html
setInterval(function() { getCookie('child') == 'close' ? this.close() : ''; }, 500);

如果cookie显示为'close',这将每隔半秒检查一次cookie并关闭窗口。

使用此方法,我们可以将任何命令发送到任何打开的窗口,并让它们执行它而无需引用该窗口。

答案 1 :(得分:1)

您的Cookie对创建它们的子域很敏感 - 即:如果在domainname.com中创建了cookie,那么您将它们重定向到www.domianname.com,它将无法在那里工作。

换句话说,对于重定向,请始终使用相对网址。