在PHP中处理会话的正确方法

时间:2015-12-27 06:23:37

标签: php session web-applications

我使用的是基于PHP 5的Web应用程序,没有任何框架,我的所有管理页面和用户页面都有以下代码来处理会话。这是处理会话的正确方法吗?或者注销后阻止用户进入主页的最佳方法?请建议我们。

<?php

if(isset($_SESSION))
{
?>

<html>...</html>

<?php
}
else {
echo 'Session expired';
}
?>

提前致谢。

3 个答案:

答案 0 :(得分:0)

在这种情况下,这样做会更短:

<?php
session_start();
if(!isset($_SESSION['whatever']))
    die("Session Expired");
?>
<html>..etc.

您不需要使用if/else包装一大堆脚本。

然而,这个问题不是主题,因为它是基于意见的,而不是关于你所面临的技术问题。

答案 1 :(得分:0)

问题是您始终必须以session_start()开头,因此可能会设置变量$_SESSION

我建议存储一个令牌来实际显示用户是否经过身份验证,以便会话被销毁。

代码段

    <?php

        session_start();

        if ($_POST["username"] == "admin" && $_POST["password"] == sha1("password")):


            $_SESSION["authorized"] = true;
            $_SESSION["id"] = session_regenerate_id();

        endif;
    ?>

在这种情况下,您可以检查会话是否存在,然后如果用户已通过身份验证,则最好还是重新生成会话ID。

<?php 
    if(isset($_SESSION) && $_SESSION["authorized"] == true):
        /* What you plan to do here */
    endif;
?>

答案 2 :(得分:-1)

你走在正确的轨道上

<?php

    if(isset($_SESSION))
    {
    ?>

    <html>...</html>

    <?php
    }
    else {

echo 'Session expired';

我会整理你的行,以便更友好一些

<?php
    if(isset($_SESSION)) {
?>

<html>...</html>

<?php
    } else {
    echo 'Session expired';
}

您也无需在<?php;文件中指定php.ini 你可以设置它,这样你就可以在做出改变后使用<?; 你需要重启apache(服务或/etc/init.d/httpd restat或windows  例如找到xampp并重新启动apache。