Назад | Перейти на главную страницу

.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 / логин http: // локальный: 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 безопасен в одном, а не в другом - я не уверен, имеет ли это какое-либо отношение к этому.

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

Ты сбиваешь с толку 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 сеанса будет отправлен после перенаправления.