HTTP cookie名称可以包含破折号吗?

时间:2013-09-20 02:00:19

标签: php http session cookies browser

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;*** 

2 个答案:

答案 0 :(得分:8)

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

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

如您所见,短划线(“ - ”)没有出现在列表中,所以没关系。

答案 1 :(得分:2)

规范说是的,我的经验说没有。

在Ubuntu上使用Chromium,我今天在cookies中出现了一个非常奇怪的连字符问题,这让我想到了这个问题。使用连字符导致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;

所有人都应该坚持下去。

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