防止Classic ASP在cookies中编码特殊字符

3
作为一种权宜之计,我们使用CloudFlare处理仍在运行Classic ASP的许多旧站点的移动重定向。为了绕过我们没有移动版本的页面的移动重定向,CloudFlare要求我们设置以下cookie:__cf_mob_redir。问题在于Classic ASP会将其转换为%5F%5Fcf%5Fmob%5Fredir。如果我们控制读取cookie,则不会有问题,但我们没有这个权限,所以这是一个问题。我的问题是:如何在Classic ASP中设置包含下划线的cookie值?

看起来这是URL编码的。您是通过查询字符串发送Cookie的值吗?无论如何,这是一个ASP URL解码函数的链接 - http://www.aspnut.com/reference/encoding.asp - John
如果我们是读取cookie的人,那么是的,这会有所帮助。问题不在于读取cookie,而在于设置cookie。我们必须能够在没有字符编码的情况下设置cookie。 - S16
你需要展示一些代码。 - user692942
3个回答

3

编辑

这个纯ASP语句对我起作用。

Response.AddHeader "Set-Cookie", "__cf_mob_redir=__cf_mob_redir; HttpOnly"

忽略之前的回答。

我很感激你的努力,但在设置 cookie 和发送头响应之前,需要返回页面,而在这种情况下,它将是一个 301/302 重定向。 - S16
@Greg-J,你的表述不够清晰。如果你想得到正确的帮助,请发布一些代码,这样人们就不必猜测了。 - user692942
我已经非常清楚了,我需要设置一个带有下划线的cookie名称,而且不能使用Classic ASP进行编码。你的解决方案使用JavaScript编写,并在ASP中将其写入浏览器窗口。 - S16
@Greg-J 我编辑了我的答案,提供了一个我个人尝试过的解决方案,在一个仅使用经典ASP的生产服务器上可以很好地工作,它可以让你发送头部响应而不返回页面,就像你在评论中指定的那样。如果不起作用,请告诉我们,因为在这种情况下问题可能出在其他地方。 - Daniele D.
1
你是个天才。谢谢! - S16

0
“httpOnly选项”禁止JavaScript访问cookie。我们无法通过document.cookie看到或操作这样的cookie。
这个工作:
response.write "<script type=""text/javascript"">"
response.write "document.cookie = ""cookie_name=cookie value; expires=Thu, 25 Dec 2023 12:00:00 UTC; path=/"";"
response.write "</script>"

-1

不确定这是否有帮助,但这里有一个解决方案,应该可以使用经典 ASP(VB Script)从 Javascript 设置 cookie。

response.write "<script type=""text/javascript"">"
response.write "set_cookie('cookie_name', " & cookie_value & ");"
response.write "</script>"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接