.htaccess Потерянная СЕССИЯ после перенаправления заголовка с использованием mod_rewrite [L, QSA] с запущенным сеансом

PHP версии 5.4.41 Apache версии 2.2.15 Linux версии 2.6. 32 CentOS 6.6

У меня есть код, который не выполняет правильную переадресацию. Здесь много кода и настроек, поэтому я постараюсь сделать его как можно проще. Моя сессия постоянно теряется после перенаправления заголовка. Ошибок и предупреждений нет ... перенаправление проходит нормально. Я session_start (); и var_dump [$ _ SESSION] на странице после перенаправления, чтобы получить NULL. Если я использую session_start и сбрасываю прямо перед перенаправлением, сеанс удаляется нормально. Я предполагаю, что это как-то связано с тем, что htaccess mod_rewrites сбрасывает сеанс между страницами, но я не уверен, как это исправить. Я продолжаю читать, чтобы добавить [L, QSA], но это не помогает. Сеансы отлично работают для простых страниц на том же сервере, которые не используют mod_rewrites.

Я думаю, что домен такой же, если посмотреть, как он происходит: http: // localhost: 8000 / web / someus / login http: // localhost: 8000 / web / someus / home

Я рекурсивно отредактировал и изменил всю папку www, чтобы apache имел все разрешения и владел всем на сайте.

Файл .htaccess выглядит так:

RewriteCond %{REQUEST_URI} !=/web/[a-z0-9]{6}/index.php
RewriteCond %{REQUEST_URI} !error [NC]
RewriteCond %{REQUEST_URI} !css [NC]
RewriteCond %{REQUEST_URI} !images [NC]
RewriteCond %{REQUEST_URI} !js [NC]
RewriteRule ^([a-z0-9]{6})/(.*)$ /web/index.php?id=$1&page=$2 [L,QSA]

httpd.conf имеет DocumentRoot:

DocumentRoot "/var/www/html"

httpd.conf имеет установленный псевдоним, который выглядит следующим образом:

Alias /web /var/www/html/website/
<Directory "/var/www/html/website/">
    AllowOverride All
    Order allow, deny
    Allow from all
</Directory>

в php.ini включен output_buffering.

session.cookie_path = /var/www/html/session
session.use_cookies = 1
session.use_only_cookies = 1

Перенаправление заголовка выглядит так: значение $ url, содержащее 'home', заменяет логин на home в URL-адресе:

header("Location: $url",true,302);
exit();

Когда я скручиваю -i на домашней странице

, я получаю:

HTTP/1.1 302 Found
Date: Wed, 10 Jun 2015 21:54:38 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.4.41
Set-Cookie: PHPSESSID=08079c815224b0b129d566dc274e0081; path=/web/someus; domain                                                                                  =127.0.0.1; secure
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=ebde43200c30ad6ac18e88b8bfb71371; path=/web/someus; domain                                                                                  =127.0.0.1; secure
Set-Cookie: PHPSESSID=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/web/                                                                                  webdmo; domain=127.0.0.1; secure; httponly
Location: login
Content-Security-Policy: default-src 'self' 'unsafe-eval' 'unsafe-inline'
X-Content-Security-Policy: default-src 'self' 'unsafe-eval' 'unsafe-inline'
X-WebKit-CSP: default-src 'self' 'unsafe-eval' 'unsafe-inline'
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
Strict-Transport-Security: max-age=631138519; includeSubDomains
Content-Length: 0
Connection: close
Content-Type: text/html; charset=UTF-8

Когда я скручиваю -i на странице входа в систему, которая перенаправляет на домашнюю страницу

Я получаю:

HTTP/1.1 200 OK
Date: Wed, 10 Jun 2015 21:58:21 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.4.41
Set-Cookie: PHPSESSID=d79a57eaabb9a41e99f4e0dda202a598; path=/web/someus; domain=127.0.0.1; secure
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Security-Policy: default-src 'self' 'unsafe-eval' 'unsafe-inline'
X-Content-Security-Policy: default-src 'self' 'unsafe-eval' 'unsafe-inline'
X-WebKit-CSP: default-src 'self' 'unsafe-eval' 'unsafe-inline'
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-Frame-Options: DENY
Strict-Transport-Security: max-age=631138519; includeSubDomains
Content-Length: 2890
Connection: close
Content-Type: text/html; charset=UTF-8

Я думаю, что интересно, что домен 127.0.0.1 безопасен в одном, а не в другом - я не уверен, есть ли в нем что-нибудь что с этим делать.

2
задан 11 June 2015 в 01:07
2 ответа

Разобрался. Я думаю, это была комбинация проблем. Два ответа (с использованием хоста localhost и смешанных файлов cookie.path), вероятно, были его частью вместе с плохой конфигурацией SSL , отбрасывающей сеанс при перенаправлении. Большое спасибо за помощь!

0
ответ дан 3 December 2019 в 14:41

Вы путаете session.cookie_path , который установлен на / var / www / html / session , с session.save_path .

См. Определения по приведенным выше ссылкам. Вероятно, вы хотите, чтобы session.save_path был / var / www / html / session и не трогал путь cookie.

Путь файла cookie сеанса сообщает браузеру, что эти файлы cookie должны быть только использоваться для определенных URL-адресов на вашем сайте.

Например, если я установил cookie с session.cookie_path из / web / someus , а затем попытался посетить / web / somethingelse , ранее установленный файл cookie не будет отправлен, потому что он находится не по пути / web / someus .

Если вы оставите путь cookie по умолчанию / , то cookie сеанса будет отправлен после перенаправления.

0
ответ дан 3 December 2019 в 14:41

Теги

Похожие вопросы