Добрый день всем, у меня просто вопрос,

В localhost у меня есть несколько систем, когда я открываю 2 или более систем, я вхожу в первую, затем в другую еще нет сессий.

Но когда я выхожу из системы, все сеансы уничтожаются. Это нормально? или это какая-то уязвимость?

Когда вы уничтожаете сеанс на том же сервере, что и localhost, он уничтожает другие сеансы на нем?

http://localhost/system1    Active Session  $_SESSION['admin']
http://localhost/system2    Active Session  $_SESSION['admin']

Я выхожу http: // localhost / system1 с помощью session_destroy (), после чего получается

http://localhost/system1    Inactive Session  
http://localhost/system2    Inactive Session

Любая помощь приветствуется! Благодарность

php
0
bdalina 5 Сен 2017 в 09:18

4 ответа

Лучший ответ

Сеансы уничтожаются на хосте,

Если вы используете Apache, вы можете использовать виртуальные хосты для создания локальных доменов. Затем зайдите на каждый сайт в example.local или example2.local

<VirtualHost *:80>
    DocumentRoot "/www/example1"
    ServerName www.example.local

    # Other directives here
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/www/example2"
    ServerName www.example2.local

    # Other directives here
</VirtualHost>

Подробнее об этом здесь: https://httpd.apache.org/docs/current /vhosts/examples.html

Или вы можете попробовать использовать встроенный веб-сервер PHP, запустив php -S localhost:8000 в корневом веб-каталоге одной папки и php -S localhost:8001 в другой. Затем вы получите доступ к ним на http: // localhost: 8000 и http: // localhost: 8001. еще не проверял этот.

http://php.net/manual/en/features.commandline.webserver.php

Другой вариант - использовать именованные сеансы http://php.net/manual/ о / function.session - name.php

1
Sarcoma 5 Сен 2017 в 06:36

Сеансы установлены для хостов, а не для подпапок. Когда вы создаете сеанс, он создается на localhost , Теперь к этой переменной сеанса могут обращаться как ваши system1, так и system2,

Использование session_destroy (); уничтожает сеанс с вашего хоста. поэтому он удаляет все ссылки на сессии.

Я думаю, что вы хотели бы особенно сбросить переменную конкретного сайта. так что используйте это.

unset($_SESSION['system1session']);

Надеюсь, это поможет

1
Rishabh Kandari 5 Сен 2017 в 06:27

Вы можете использовать разные имена для каждой сессии.

PHP имеет функцию имени сеанса, которая задает имя для файла cookie, и поэтому два разных имени будут иметь свою собственную область видимости и идентификатор.

Один файл:

session_name("ServerApp1"):;
session_start();

$_SESSION["a"] = ...

Другой файл:

session_name("ServerApp2"):;
session_start();

$_SESSION["a"] = ...

Используя этот подход, вы можете уничтожить сессию в одном файле, в то время как другой останется нетронутым.

1
KIMB-technologies 8 Ноя 2017 в 12:44

Если для обеих систем вы используете один и тот же идентификатор сеанса (другими словами, это означает, что один и тот же файл / сущность сеанса), тогда да, это нормально. Потому что у вас есть только один сеанс, который содержит данные из нескольких систем.

Ваши системы могут использовать разные сеансы, но для этого вам нужно вручную создать идентификатор сеанса (взгляните на http://php.net/manual/en/function.session-create-id.php и http://php.net/manual/en/function.setcookie.php, чтобы узнать, как изменить путь к файлам cookie).

В вашей ситуации самым простым решением было бы сбросить системные данные из сеанса (при выходе из системы), тогда другие системные данные не будут удалены.

2
Neodan 8 Ноя 2017 в 12:39