php解析cookie名称的问题

今天才发现 php 在解析 cookie 时会把名称中包含的.(点)转换成_(下划线),翻遍手册没发现有任何标注,特意去翻RFC也没找到相应的约定,看来应该是PHP自己的发明。(所以:当你设置了一个包含.或空格作名字的cookie,再读取时记得自行转换名字,否则就读不到)

php源码中的 main/php_variables.c 大约 98 行起有以下部分:

 /* ensure that we don't have spaces or dots ... */
 for (p = var; *p; p++) {
 if (*p == ' ' || *p == '.') {
 *p='_';
 } else if (*p == '[') {

看上去可能是为了兼容早期的 register_globals,从而不让名称中包含 . 或空格

php解析cookie名称的问题》上有2条评论

  1. testxd

    这个嘛··不止COKIES,对于POST,GET等提交的变量也会做这样的处理
    常见的就是表单变量,这个转换在手册里面说了

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>