2010-06-23 3 views
4

Использование сеансов для систем входа в PHP. Во всех примерах входа люди используют функцию «session_start()». Но я смутился об этом.Система входа в PHP с сеансами

=================================

На локальном хосте у меня есть файлы;

http://localhost/app1/page1.php

http://localhost/app1/page2.php

http://localhost/app2/page2.php

=============================== ==============

В app1/page1.php, я запускаю сеанс и устанавливаю переменную.

session_start(); 
session_regenerate_id(true); 
$_SESSION[ 'name' ] = 'this is my name'; 

=========================================== ==

В app1/page2.php и app2/page2.php, я запускаю сеанс и получаю значение этой переменной.

session_start(); 
echo 'name: ' . $_SESSION[ 'name' ]; 

=========================================== ==

Открыт http://localhost/app1/page1.php, а затем http://localhost/app1/page2.php и он отлично работает. Но после этого я открываю http://localhost/app2/page2.php, а также на экране отображается «это мое имя», и это неправильно. Потому что это другое приложение, и я не хочу, чтобы приложение2 достигало сеанса приложения1.

Как я могу решить эту проблему? Я не хочу использовать разные имена переменных для каждого приложения. Думаю, должно быть другое хорошее решение. Я могу восстановить ID на app2/page1.php, возможно, но если человек пытается открыть app2/page2.php, после открытия приложения 1 они могут попасть в приложение2, и это не станет для меня хорошим.

спасибо.

ответ

8

Вы должны использовать session_name() перед session_start(); Пример:

app1/page1.php & page2.php

session_name('app1_session'); 
session_start(); 

app2/page1.php & page2.php

session_name('app2_session'); 
session_start(); 
+0

+1, бил меня к нему. –

+0

Ну, я думаю, Рассел Диас избил меня.+1 к нему тоже :) – Bogdan

+1

В качестве альтернативы, если приложениям когда-либо понадобится поделиться некоторыми данными, просто укажите пространства для конкретных приложений в '$ _SESSION' (то есть' $ _SESSION ['app1'] ['x'] 'и '$ _SESSION [ 'app2'] [ 'х'] '.) –

5

Вам необходимо будет использовать session_name, который должен быть запущен до session_start.

session_name() возвращает имя текущего сеанса.

Пример:

session_name("name"); 
session_start(); 
Смежные вопросы