2017-01-06 3 views
0

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

Когда я перехожу на подстраницу в том же домене и пытаюсь вызвать переменные из сеанса, я просто получаю пустые поля. Я пробовал делать print_r ($ _ REQUEST); на подстранице и распечатывает следующее:

Array ([wp-settings-1] => libraryContent=browse&editor=html [wp-settings-time-1] => 1478015951 [PHPSESSID] => 0744bf21ab3712e4735e07d926433aa3 [sec_session_id] => 60e56049f51c76e9ec4932c6702e7b72) 

Это соответствует выходному на главной странице. Я знаю, что должен делать session_start(); но когда я включаю, что в моем коде я получаю следующее сообщение об ошибке:

Notice: A session had already been started - ignoring session_start() 

Причина, я знаю, что переменные не передается, потому что, когда я

if(isset($_SESSION["user_id"])){ 
$user_id = $_SESSION["user_id"]; 
} 

echo "User id: " .$_SESSION["user_id"]; 

я только получаю

User id: 

И всякий раз, когда я пытаюсь вызвать переменную, я получаю сообщение об ошибке, которое оно не задано.

Есть ли какой-то шаг, который мне не хватает?

Настройка сеанс переменные:

if ($stmt->num_rows == 1) { 
     // If the user exists we check if the account is locked 
     // from too many login attempts 
     if (checkbrute($user_id, $mysqli) == true) { 
      // Account is locked 
      // Send an email to user saying their account is locked 
      return false; 
     } else { 
      // Check if the password in the database matches 
      // the password the user submitted. 
      if ($db_password == $password) { 
       // Password is correct! 
       // Get the user-agent string of the user. 
       $user_browser = $_SERVER['HTTP_USER_AGENT']; 

       // XSS protection as we might print this value 
       $user_id = preg_replace("/[^0-9]+/", "", $user_id); 
       $_SESSION['user_id'] = $user_id; 
       $sessions['user_id'] = $user_id; 
       // XSS protection as we might print this value 
       $username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username); 

       $_SESSION['username'] = $username; 
       $_SESSION['login_string'] = hash('sha512', $password . $user_browser); 

       // Login successful. 
       return true; 
      } else { 
       // Password is not correct 
       // We record this attempt in the database 
       $now = time(); 
       if (!$mysqli->query("INSERT INTO login_attempts(user_id, time) 
           VALUES ('$user_id', '$now')")) { 
        header("Location: ../error.php?err=Database error: login_attempts"); 
        exit(); 
       } 

       return false; 
      } 
     } 
    } else { 
     // No user exists. 
     return false; 

и функция для запуска защищенного сеанса:

function sec_session_start() { 
$session_name = 'sec_session_id'; // Set a custom session name 
$secure = SECURE; 

// This stops JavaScript being able to access the session id. 
$httponly = true; 

// Forces sessions to only use cookies. 
if (ini_set('session.use_only_cookies', 1) === FALSE) { 
    header("Location: ../error.php?err=Could not initiate a safe session (ini_set)"); 
    exit(); 
} 

// Gets current cookies params. 
$cookieParams = session_get_cookie_params(); 
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly); 

// Sets the session name to the one set above. 
session_name($session_name); 

session_start();   // Start the PHP session 
session_regenerate_id(); // regenerated the session, delete the old one. 
} 
+0

где вы устанавливаете user_id для сеансов? если это wordpress, используйте глобальную $ session; print_r ($ sessions); он распечатает вашу переменную сеанса. установить user_id в сеансы --- $ sessions ['user_id'] = 'ваш идентификатор пользователя; что вы можете получить доступ в любом месте приложения –

+0

Нет. Я устанавливаю user_id в php-сеансе при входе на платформу, не имеет ничего общего с wordpress $ _SESSION ['user_id'] = $ user_id; – ArtleMaks

ответ

0

Увидев вам код я понимаю это WordPress сайт,

если да следовать следующему шаги:

Шаг 1: добавьте следующий код в свой wp-контент/темы папка/functions.php

add_action('init', 'myStartSession', 1); 
add_action('wp_logout', 'myEndSession'); 
add_action('wp_login', 'myEndSession'); 

function myStartSession() { 
    if(!session_id()) { 
     session_start(); 
    } 
} 

function myEndSession() { 
    session_destroy(); 
} 

шаг 2: установите user_id

$_SESSION['user_id'] = "your id"; 

шаг 3: чтобы получить доступ к идентификатор сеанса

if(isset($_SESSION['user_id'])) { 
    $value = $_SESSION['myKey']; 
} else { 
    $value = ''; 
} 

, если ваш сайт не является WordPress

add session_start() at header.php(or first line of your code) 
then use your session variables. 
+0

Это не сайт WordPress. Это веб-сайт php, сеанс wordpress существует, возможно, потому, что на сервере есть установка wordpress, но не имеет никакого отношения к фактическому сайту, с которым я работаю с atm. См. Мой отредактированный вопрос, чтобы посмотреть, как я устанавливаю и начинаю сессию – ArtleMaks

+0

И добавление session_start(); в начале файла выдается сообщение о том, что уже запущен сеанс – ArtleMaks

Смежные вопросы