Проверьте сеанс с переменными сервера - PullRequest
2 голосов
/ 27 апреля 2011

Я пытался защитить свои страницы, проверяя следующий код (часть):

if (($_SERVER['REMOTE_ADDR'] != $_SESSION['USER_IP']) || !isset($_SESSION['SERVER_GENERATED_SID']))
{
    session_destroy();
}

$_SESSION['SERVER_GENERATED_SID'] = true;
$_SESSION['USER_IP'] = $_SERVER['REMOTE_ADDR'];

По какой-то причине он убивает сеанс каждый раз.

Это мой индексстраница:

<?php
require('includes/sessions.php');
require('includes/language.php');

$page_name = "Anchor & Steel Constructions";

require('includes/header.php');
?>

<div id="page">
        <div>
            <div id="content">
                <?php

                if(!isset($_SESSION['user_id']) || !in_array($_SESSION['user_type'], $user_types))
                {
                    include('user_login.php');
                }

                ?>
            </div>
        </div>
        <div style="clear: both;">&nbsp;</div>
</div>

Мой код входа в систему, где переменные добавляются в сеанс: $ _SESSION ['user_ip'] = $ _SERVER ['REMOTE_ADDR'];

$_SESSION['user_id'] = $row['user_id'];
                $_SESSION['user_user'] = $row['user'];
                $_SESSION['user_name'] = $row['naam'];
                $_SESSION['user_mail'] = $row['email'];
                $_SESSION['user_lang'] = $row['language'];

сеансов:

<?php
// gebruik een andere naam voor de sessie dan de standaard php naam
session_name('what_ever');

// start session
if(!session_start())
{
    exit("Er kan geen sessie worden gestart");
}

// generate nieuwe sessie id
session_regenerate_id();

// set timeout period in seconds
if($_SESSION['user_type'] != 'beheerder')
{
    $inactive = 180;
}
else
{
    $inactive = 28800;
}

// check to see if $_SESSION['timeout'] is set
if(isset($_SESSION['timeout']) ) {
    $session_life = time() - $_SESSION['timeout'];
    if($session_life > $inactive)
        { session_destroy(); header("Location: user_logout.php"); }
}
$_SESSION['timeout'] = time();

$user_types = array('beheerder', 'kantoor', 'werkplaats', 'administratie');

// controleer of de user gebruikt maakt van dezelfde user agent als bij voorgaande request en accepteer alleen door server gegenereerde SID's
if (($_SERVER['REMOTE_ADDR'] != $_SESSION['user_ip']) || !isset($_SESSION['SERVER_GENERATED_SID']))
{
    session_destroy();
}

// sla variabelen op
$_SESSION['SERVER_GENERATED_SID'] = true;
$_SESSION['user_ip'] = $_SERVER['remote_addr'];

?>

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

убедитесь, что вы написали код session_start(); в начале вашего php / html кода

Пример

<?php 
session_start();

?>
<html><head></head><body>hi friend</body></html>
1 голос
/ 27 апреля 2011

Установлено ли когда-либо $_SESSION['SERVER_GENERATED_SID'] при проверке?

Из комментариев к этому ответу
Как насчет изменения $_SESSION['user_ip'] = $_SERVER['remote_addr'] на $_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...