代码之家  ›  专栏  ›  技术社区  ›  user2029763

未写入会话ID。文件中没有空白

  •  1
  • user2029763  · 技术社区  · 11 年前

    我遇到了一个问题,会话ID没有被写入。如果这个问题持续了很长时间,我很抱歉,但我已经做了很多测试来排除某些事情,所以我认为展示我所掌握的所有数据是有用的。

    对于每次测试,我都会在Chrome中打开一个新的隐姓埋名窗口,以确保在开始新测试之前清除cookie/会话。

    此外,请注意,我正在工作的网站在两个不同的文件夹中有两种不同的语言。英语和希伯来语。

    网站的英语版一切都很好,但希伯来语版则不然。一些“include”文件位于一个名为/php/的单独文件夹中,希伯来语和英语都包含该文件夹。

    不确定是否相关,但.htaccess文件包含英语和希伯来语的重定向,类似于:

    RewriteEngine on
    
    RewriteCond %{ENV:REDIRECT_STATUS} 200
    RewriteRule .* - [L]
    
    RewriteRule ^categories/(.+) /HE/categories.php?pg=$1&type=$2 [L]
    

    在php页面本身(例如categories.php)上,代码开始于:

    <?php include_once('header.php');
    

    在header.php中,我有:

    <?
    require_once '../php/config.php';
    require_once 'functions.php';
    

    在希伯来语和英语版都使用的config.php中,我有:

    <?php
    session_start();
    echo "--".session_id();
    

    在所有情况下

    当我转到页面时:

    http://www.goo.com/HE/categories/foo

    每次刷新时,它都会回显session_id()的一个新值

    在错误日志中,我得到:

    [23-Oct-2013 04:12:41] PHP Warning:  session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cookie - headers already sent by (output started at /home/foo/public_html/HE/header.php:1) in /home/foo/public_html/php/config.php on line 2
    [23-Oct-2013 04:12:41] PHP Warning:  session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at /home/foo/public_html/HE/header.php:1) in /home/foo/public_html/php/config.php on line 2
    

    现在,我想再次强调,据我所知,没有空白区,类似的空白区似乎在英语方面没有问题。

    我创建了一个名为testsess.php的文件,其中包含:

    <?php程序
    session_start();
    echo“--”.session_id();
    

    并将其放在HE文件夹中,这样就可以正常工作,不会出现错误

    我确信这是一件非常简单的事情,但我已经尝试了好几个小时不同的事情,完全被难住了。

    2 回复  |  直到 11 年前
        1
  •  2
  •   mandza James    11 年前

    检查您的文件是否为UTF-8。 一些文本编辑器在UTF-8文件的开头添加了一些代码。 检查您包含的文件中是否有任何额外的字符。

        2
  •  1
  •   Community CDub    7 年前

    你可以参考这个 SO Question

    这可能是一个UTF-8 BOM(字节顺序标记)问题。如果可以访问窗口环境,则可以使用Notepad++删除BOM表:

    1. 在记事本中打开文件++
    2. 在里面 编码 菜单选择“ 以UTF-8编码,不带BOM "
    3. 然后保存