Переименовывание сессий

169
19 декабря 2016, 19:41

Пытаюсь задать сессии определённое значение, но когда перехожу по страницам сайта значение опять сбрасывается на дефолтное, помогите, пожалуйста понять, почему. В файле f1.php сначала из БД получается значение id и сохраняется в $_SESSION['id'], а потом вызывается

require 'f2.php';
abc();

Написала вот такую функцию, которая находится в файле f2.php:

function abc() {
    $prefix = $_SESSION['id'];
    session_name('MYPROJECT'.($prefix ? '_'.$prefix : ''));
    ini_set('session.cookie_lifetime', 0);
    echo "Имя сессии".session_name();
}

Вот здесь "Имя сессии": MYPROJECT_1

Далее нажимается кнопка, которая находится в файле f1.php (переход на другую страницу) и вызывается f3.php (в котором находится скрипт следующей страницы), и при вызове в этом файле session_name() имя сессии опять дефолтное

Опять ничего не получается.. Перепробовала уже уйму способов, но ничего не меняется. Сценарий такой: захожу под первым пользователем, логинюсь, открываю сайт для второго пользователя, логинюсь, потом возвращаюсь на первую вкладку (с 1м юзером) и при попытке перейти с этой вкладки на другую страницу сайта логин юзера меняется на последнего вошедшего (т.е второго). Не получается реализовать работу в разных вкладках под разными пользователями, они постоянно склеиваются в одного пользователя. Попробовала сделать так, как мне посоветовали здесь (на каждой странице сайта меняю имя сессии), но возникла проблема с $_SESSION['id'], которую использую для переименовывания, оно заменяется последней и не получается её сохранять, а поскольку данные авторизации получаются один раз, то постоянно делать запросы к БД тоже не могу, т.к переменные логин/пароль так же затираются

Последний код:

f1.php

session_start();
......   //подключение к БД
    $Login=$_POST['Login'];
    $Password=$_POST['Password'];
    $query="SELECT id
        FROM user
        WHERE login='".$Login."' AND password='".$Password."'";
       $zapros=mysql_query($query);
session_name('MYPROJECT'.($user['idemployee'] ? '_'.$user['idemployee']:''));
        $_SESSION['id'] = $user['idemployee'];
include "f2.php";
echo "Авторизация ";
f2.php
session_start();
if (session_id() ) {echo "Сессия создана с номером ".session_name();
 session_name('MYPROJECT'.($SESSION['id'] ? ''.$_SESSION['id'] : ''));
ini_set('session.cookie_lifetime', 0);
}

Answer 1

Вам необходимо устанавливать session_name при каждой загрузке приложения (старте сессии) к примеру:

start_session();
$prefix = $_SESSION['id'];
session_name('MYPROJECT'.($prefix ? '_'.$prefix : ''));

Перед каждым скриптом.

ps. зачем вам $prefix?

Answer 2

session_name() должна вызывтся на всех страницах перед session_start() и session_register() http://php.net/manual/ru/function.session-name.php

READ ALSO
Вывод изображений в слайдер

Вывод изображений в слайдер

Для пробы создал на denwer мини сайт для пробы , вывел статьи из базы и так же создал слайдер на owl-carouselЦиклом выводил url адреса изображений и через...

208
Mysql DATE_SUB(NOW(), INTERVAL 1 DAY) , Как это работает?

Mysql DATE_SUB(NOW(), INTERVAL 1 DAY) , Как это работает?

Пытаюсь в базу занести дату с интервалом в 1 день,использую следующий запрос

307
dbSimple placeholder-ы

dbSimple placeholder-ы

Есть функция

213
Вывод второго меню на wordpress

Вывод второго меню на wordpress

Как вывести два меню в wordpress? Я прописал следующие строчки в файле function

264