Различать две сессии в PHP

Я пробовал кодирование следующим образом для одного из сайтов через локальный хост. localhost / abc:

<?php session_start(); $_SESSION['name']=$row['name'] ?> 

Выход был хорошим. но когда один и тот же код использовался для другой веб-страницы над одним и тем же локальным хостом, укажите localhost / xyz. Затем между именами была двусмысленность. Как будто мне нужно различать сеансы для xyz и abc.

Поэтому я попробовал это:

 <?php session_id(226); session_name(veer); session_start(); . . .//connection with database and all . $_SESSION['name']=$row['name']; echo($_SESSION['name']); ?> 

Когда другой компьютер регистрировался на одном сервере, тогда созданный мной сеанс был доступен этой машине для той же веб-страницы.

Есть ли решение. Или как провести различие между двумя сеансами?

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

http://localhost/xyz и http://localhost/abc ссылаются на один и тот же сайт localhost, и поэтому вы не запускаете другой сеанс session_start() а вместо этого возобновляете его. Вы также можете создавать виртуальные хосты, как сказал Джон, но для тестирования, которые, как я полагаю, вы используете, просто используйте разные браузеры.

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

 session_start(); echo (session_id()); 

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

Использовать session_regenerate_id(); метод во втором файле (xyz).

это?

 <?php session_start(); if (!isset($_SESSION['xyz'])) { $_SESSION['xyz'] = array(); } $_SESSION['xyz']['name'] = $row['name']; ?> 

иногда вместо того, чтобы делать выше, я просто префикс моего примера сеансовых ключей: $ _SESSION ['xyz_name']; Я сделал это после того, как понял, что моя CPanel использовала некоторые собственные сессии, которые вызвали конфликт.

Запросы от одного и того же пользовательского агента на один и тот же веб-сервер будут использовать один и тот же сеанс, запрещая явную конфигурацию, которая зависит от вашей точной настройки сервера.

Обычно эта проблема устраняется, потому что «другая веб-страница» будет фактически находиться в другом домене целиком, поэтому cookie сеанса (и, кроме того, данные сеанса) не будет использоваться совместно. Это также то, что вы должны делать, если вы хотите независимо запускать отдельные приложения на localhost : настроить отдельные виртуальные хосты в отдельных внутренних доменах.

Вы также можете решить проблему исключительно в коде, не используя $_SESSION непосредственно для хранения ваших данных, а подраздел, основанный на некотором дифференцирующем коэффициенте, таком как $_SESSION['SCRIPT_NAME'] . Очень простой пример:

 $sessionKey = "default"; if (strpos($_SESSION['SCRIPT_NAME'], "dir1/")) { $sessionKey = "dir1"; } else if (strpos($_SESSION['SCRIPT_NAME'], "dir2/")) { $sessionKey = "dir2"; } $_SESSION[$sessionKey]['mydata'] = 'foo'; 

Однако это последнее – действительно неэлегантное решение, которое я бы не рекомендовал.