2011-08-18 99 views
0

我正在构建登录页面。现在,我在使用Cookie的页面上有一个过期。我希望网站在重新登录后重定向到他们所在的页面。在cookie中保留正斜杠PHP

为此,我使用一个具有存储在其中的页面名称的cookie(例如queue.php),并且它会将其取回。

如果我要访问位于同一目录中的页面,但如果我想返回到子目录(例如Deployment/deployment.php),则此方法无效。

我试过urlencode(),反斜杠,addslashes(),%2F代替正斜杠,并没有任何东西似乎工作。

这是我如何设置cookie:

$url_name = "Deployment/deployment.php"; 
setcookie("url",$url_name); 

任何帮助,将不胜感激,我完全失去了。

回答

0

也许你可以base64_encode()的值,然后base64_decode它在检索?只是一个虽然。不过,我不知道为什么不允许斜杠。也许别人能启发我!

1

我不知道你的登录页面被发现,但如果Deployment是一个子目录(所以主文件夹下的一个级别),你应该添加一个斜杠盈的它,像这样:

$url_name = "/Deployment/deployment.php"; 
setcookie("url", $url_name); 
0

你能解释一下你的问题吗?我只是尝试以下,并能够检索cookie的值就好:

<?php 
$url = "http://google.com/mail"; 
echo "Setting cookie with value " . $url . "</br>"; 
setcookie("url", $url); 
echo "The cookie is: " . $_COOKIE['url'] . "</br>"; 
?> 
+0

这不起作用。脚本初始化完成后,超级全局变量不会被php触及。新的cookie只会显示在下一页加载的cookie中。同样,你在setcookie调用之前有一个回声,所以这一切产生的是一个“头已发送”的错误,不能设置一个cookie。 –

+0

对,你必须刷新页面才能获得cookie的价值。另外,我在发布之前测试了代码,并没有提出“头文件已发送”错误。 – johnluetke

+0

@Marc B:可能他在PHP的ini配置中将output_buffering设置为TRUE;这不会导致“头文件已发送”错误。 – Pete171

0

究竟是什么不起作用?正如the manual说:

注意,当你发送cookie cookie的值部分将自动url编码,并且在接收时,它会自动通过相同的名称作为其解码并分配给一个变量cookie名称。

所以没有必要手动编码/解码。我不认为$url_name中的斜线是问题所在。我怀疑你重定向的路径有些不正确,但是我无法检查没有更多的代码。

1

setrawcookie()似乎是你要做的功能。根据php.net,它与setcookie()完全相同,只是它不会执行任何urlencoding。