6

HTTP cookie 名称可以包含破折号吗?有可靠的参考吗?

我在 Chrome 上试过了,很好,但我担心其他浏览器可能不允许,因为在 PHP 参考http://php.net/manual/en/function.session-name.php中说:

name:
The session name references the name of the session, 
which is used in cookies and URLs (e.g. PHPSESSID). 
***It should contain only alphanumeric characters;*** 
4

2 回答 2

12

在定义RFC6265的用语中,cookie 名称被定义为“令牌” 。令牌在RFC2616第 2.2 节中定义。这是摘录:

   token          = 1*<any CHAR except CTLs or separators>
   separators     = "(" | ")" | "<" | ">" | "@"
                  | "," | ";" | ":" | "\" | <">
                  | "/" | "[" | "]" | "?" | "="
                  | "{" | "}" | SP | HT

如您所见,破折号(“-”)没有出现在列表中,所以没关系。

于 2013-09-20T02:10:29.170 回答
3

规范说是,我的经验说不是。

在 Ubuntu 上使用 Chromium,我今天在 cookie 中发现了一个非常奇怪的连字符问题,这让我想到了这个问题。使用连字符会导致 cookie 在几微秒内过期(通过在页面加载中多次将 document.cookie 转储到控制台来证明)。

扯掉大部分头发后,我现在可以清楚地看到

tibbed-WP_ID_313=true; expires=Wed, 03 Dec 2014 20:28:26 GMT

(两天后)持续大约一半的页面加载,而这些变体

tibbedWP_ID_313=true; 
tibbed_WP_ID_313=true; 
tibbed:WP_ID_313=true;

一切都应该坚持下去。

在过去的几个月里,这段代码一直运行良好。去搞清楚。从现在开始,我将避免使用连字符(破折号)。

于 2014-12-01T18:52:19.830 回答