重写url时未设置会话


Session is not set when i rewrite url

我使用vhost在本地工作。

我的网址如下:http://smartspace.dev/index.php/game我希望它是这样的:http://smartspace.dev/game

会话输出:

array (size=6)
  'id' => string '4' (length=1)
  'agent' => string 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36' (length=108)
  'planet' => int 0
  'last' => 
    array (size=4)
      'sessionID' => string 'a710069jelqmr7ifdvvail1hi4' (length=26)
      'userID' => string '4' (length=1)
      'userIP' => string '127.0.0.1' (length=9)
      'lastonline' => string '1421747723' (length=10)
  'path' => string 'index.php' (length=9)
  'PHPDEBUGBAR_STACK_DATA' => 
    array (size=0)
      empty

当我输入url:http://smartspace.dev/index.php/game 时,我可以访问$_SESSION its not empty

但当我输入url时:http://smartspace.dev/game会话为空数组(大小=0(空

我使用以下.htaccess使我的url看起来更漂亮。。。

<IfModule mod_rewrite.c>
  RewriteCond %{SCRIPT_FILENAME} -d
  RewriteCond %{SCRIPT_FILENAME} -f
  RewriteRule "(^|/)'." - [F]
</IfModule>
<FilesMatch "('.(bak|config|sql|fla|psd|ini|log|sh|inc|swp|dist)|~)$">
  Order allow,deny
  Deny from all
  Satisfy All
</FilesMatch>
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    RewriteEngine On
    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

在这里,我还粘贴$_SERVER:的输出

带有index.phpurl:http://smartspace.dev/index.php/game

array (size=36)
  'HTTP_HOST' => string 'smartspace.dev' (length=14)
  'HTTP_CONNECTION' => string 'keep-alive' (length=10)
  'HTTP_ACCEPT' => string 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' (length=74)
  'HTTP_USER_AGENT' => string 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36' (length=108)
  'HTTP_ACCEPT_ENCODING' => string 'gzip, deflate, sdch' (length=19)
  'HTTP_ACCEPT_LANGUAGE' => string 'en-US,en;q=0.8,de-DE;q=0.6,de;q=0.4,tr;q=0.2,fr;q=0.2' (length=53)
  'HTTP_COOKIE' => string 'lang=en; PHPSESSID=mib1vvnitulmunionb9v9mdr83; SmartSpace=a710069jelqmr7ifdvvail1hi4' (length=84)
  'PATH' => string 'C:'ProgramData'Oracle'Java'javapath;C:'Windows'system32;C:'Windows;C:'Windows'System32'Wbem;C:'Windows'System32'WindowsPowerShell'v1.0';C:'wamp'bin'php'php5.5.12;C:'ProgramData'ComposerSetup'bin;C:'Program Files (x86)'Git'cmd;C:'Program Files (x86)'nodejs';' (length=257)
  'SystemRoot' => string 'C:'Windows' (length=10)
  'COMSPEC' => string 'C:'Windows'system32'cmd.exe' (length=27)
  'PATHEXT' => string '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC' (length=53)
  'WINDIR' => string 'C:'Windows' (length=10)
  'SERVER_SIGNATURE' => string '<address>Apache/2.4.9 (Win64) PHP/5.5.12 Server at smartspace.dev Port 80</address>
' (length=84)
  'SERVER_SOFTWARE' => string 'Apache/2.4.9 (Win64) PHP/5.5.12' (length=31)
  'SERVER_NAME' => string 'smartspace.dev' (length=14)
  'SERVER_ADDR' => string '127.0.0.1' (length=9)
  'SERVER_PORT' => string '80' (length=2)
  'REMOTE_ADDR' => string '127.0.0.1' (length=9)
  'DOCUMENT_ROOT' => string 'C:/wamp/www/SmartSpace/' (length=23)
  'REQUEST_SCHEME' => string 'http' (length=4)
  'CONTEXT_PREFIX' => string '' (length=0)
  'CONTEXT_DOCUMENT_ROOT' => string 'C:/wamp/www/SmartSpace/' (length=23)
  'SERVER_ADMIN' => string 'admin@smartspace.dev' (length=20)
  'SCRIPT_FILENAME' => string 'C:/wamp/www/SmartSpace/index.php' (length=32)
  'REMOTE_PORT' => string '51752' (length=5)
  'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7)
  'SERVER_PROTOCOL' => string 'HTTP/1.1' (length=8)
  'REQUEST_METHOD' => string 'GET' (length=3)
  'QUERY_STRING' => string '' (length=0)
  'REQUEST_URI' => string '/index.php/game' (length=15)
  'SCRIPT_NAME' => string '/index.php' (length=10)
  'PATH_INFO' => string '/game' (length=5)
  'PATH_TRANSLATED' => string 'redirect:'index.php' (length=19)
  'PHP_SELF' => string '/index.php/game' (length=15)
  'REQUEST_TIME_FLOAT' => float 1421748882.781
  'REQUEST_TIME' => int 1421748882

没有index.phpurl:http://smartspace.dev/game

array (size=36)
  'REDIRECT_STATUS' => string '200' (length=3)
  'HTTP_HOST' => string 'smartspace.dev' (length=14)
  'HTTP_CONNECTION' => string 'keep-alive' (length=10)
  'HTTP_ACCEPT' => string 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' (length=74)
  'HTTP_USER_AGENT' => string 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36' (length=108)
  'HTTP_ACCEPT_ENCODING' => string 'gzip, deflate, sdch' (length=19)
  'HTTP_ACCEPT_LANGUAGE' => string 'en-US,en;q=0.8,de-DE;q=0.6,de;q=0.4,tr;q=0.2,fr;q=0.2' (length=53)
  'HTTP_COOKIE' => string 'SmartSpace=15ngr9spbsqfb09fvst2gk5tc4; lang=en; PHPSESSID=mib1vvnitulmunionb9v9mdr83; SmartSpace=a710069jelqmr7ifdvvail1hi4' (length=123)
  'PATH' => string 'C:'ProgramData'Oracle'Java'javapath;C:'Windows'system32;C:'Windows;C:'Windows'System32'Wbem;C:'Windows'System32'WindowsPowerShell'v1.0';C:'wamp'bin'php'php5.5.12;C:'ProgramData'ComposerSetup'bin;C:'Program Files (x86)'Git'cmd;C:'Program Files (x86)'nodejs';' (length=257)
  'SystemRoot' => string 'C:'Windows' (length=10)
  'COMSPEC' => string 'C:'Windows'system32'cmd.exe' (length=27)
  'PATHEXT' => string '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC' (length=53)
  'WINDIR' => string 'C:'Windows' (length=10)
  'SERVER_SIGNATURE' => string '<address>Apache/2.4.9 (Win64) PHP/5.5.12 Server at smartspace.dev Port 80</address>
' (length=84)
  'SERVER_SOFTWARE' => string 'Apache/2.4.9 (Win64) PHP/5.5.12' (length=31)
  'SERVER_NAME' => string 'smartspace.dev' (length=14)
  'SERVER_ADDR' => string '127.0.0.1' (length=9)
  'SERVER_PORT' => string '80' (length=2)
  'REMOTE_ADDR' => string '127.0.0.1' (length=9)
  'DOCUMENT_ROOT' => string 'C:/wamp/www/SmartSpace/' (length=23)
  'REQUEST_SCHEME' => string 'http' (length=4)
  'CONTEXT_PREFIX' => string '' (length=0)
  'CONTEXT_DOCUMENT_ROOT' => string 'C:/wamp/www/SmartSpace/' (length=23)
  'SERVER_ADMIN' => string 'admin@smartspace.dev' (length=20)
  'SCRIPT_FILENAME' => string 'C:/wamp/www/SmartSpace/index.php' (length=32)
  'REMOTE_PORT' => string '51788' (length=5)
  'REDIRECT_URL' => string '/game' (length=5)
  'GATEWAY_INTERFACE' => string 'CGI/1.1' (length=7)
  'SERVER_PROTOCOL' => string 'HTTP/1.1' (length=8)
  'REQUEST_METHOD' => string 'GET' (length=3)
  'QUERY_STRING' => string '' (length=0)
  'REQUEST_URI' => string '/game' (length=5)
  'SCRIPT_NAME' => string '/index.php' (length=10)
  'PHP_SELF' => string '/index.php' (length=10)
  'REQUEST_TIME_FLOAT' => float 1421748975.194
  'REQUEST_TIME' => int 1421748975

有助于找出差异的网站:https://www.diffchecker.com/x2brteqf

这是我的会话构造函数:

class Session
{
    private static $obj;
    private static $isInit = false;
    static function init() {
        ini_set('session.use_cookies', '1');
        ini_set('session.use_only_cookies', '1');
        ini_set('session.use_trans_sid', 0);
        ini_set('session.auto_start', '0');
        ini_set('session.serialize_handler', 'php');  
        ini_set('session.gc_maxlifetime', SESSION_LIFETIME);
        ini_set('session.gc_probability', '1');
        ini_set('session.gc_divisor', '1000');
        ini_set('session.bug_compat_warn', '0');
        ini_set('session.bug_compat_42', '0');
        ini_set('session.cookie_httponly', true);
        session_set_cookie_params(SESSION_LIFETIME, '/', NULL, HTTPS, true);
        session_cache_limiter('nocache');
        session_name('SmartSpace');
        self::$isInit   = true;
    }
    function __construct()
    {
        if(self::$isInit === false)
        {
            self::init();
        }
    }

您需要在调用session_start()之前使用session_set_cookie_params()函数,并使用正确的$path参数。该值取决于您的应用程序安装(如果它安装在webroot的子目录中会怎样?(,但在您的特定情况下,该值为'/'