【发布时间】:2014-07-31 17:00:21
【问题描述】:
我正在使用 PHP 和 MySQL 创建一个门户网站,供用户使用单点登录方法登录和访问各种工具。一些工具包括 phpMyAdmin 和 Piwik。登陆页面将显示他们无需单独登录即可使用的所有工具。
会话称为“门户”。
我有以下文件: index.php - 检查他们是否已登录。如果已登录,则会显示一个包含工具列表的页面。
login.php - 提供登录表单,创建会话,如果授权则重定向回 index.php
logout.php - 提供注销功能来销毁会话。
由于我在过去 4 年没有使用 PHP,我知道可能发生了很多变化。
以下是用于每个页面的脚本。
index.php
<?php
session_start();
if(!isset($_SESSION['user']) || (trim($_SESSION['pass']) == '')) {
header("location: login.php");
exit();
} else }
// show list of tools (secure area)
}
?>
login.php
<?php
if (!empty($_POST)) {
session_set_cookie_params(0, '/', '', 0); // NOT SURE WHAT THIS DOES?
session_name("Portal");
session_start();
// check if credentials match
...code...
// if credentials are ok
$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
session_write_close();
header('Location: index.php');
} else {
// show login form
}
?>
logout.php
<?php
session_start();
$_SESSION = array();
if (ini_get("session.use_cookies")) { // !not sure what all this below does!
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 4200,
$params["path"], $params["domain"], $params["secure"], $params["httponly"]);
}
session_destroy();
header('Location: http://.../index.php');
?>
如何删除特定会话,即门户?我在根域有另一个登录名来访问报告,我不希望有权访问这两个会话的用户退出两个会话,而只是退出门户。
我的编码中是否有任何需要更改的内容以提高/增强安全性?
谢谢!
【问题讨论】:
-
对于初学者,不要将用户的密码放在会话中。你也不需要显式调用
session_write_close。 -
我根本不会这样做。为您的应用程序使用正确的 SSO 方法。如果他们没有,请不要这样做。不要将用户的密码重播到其他应用程序……它通常不起作用,而且根本不安全。
-
@Mark,确实存在会话和
header重定向的问题。在 5.2.x 之前,我一直在使用 PHP 的 Windows 环境中遇到这种情况。不过,我不知道这是否已修复。解决它的唯一方法是显式调用session_write_close。 -
phpMyAdmin 支持单点登录。它请求将密码放入会话中(即 $_SESSION['PMA_single_signon_password'] = $_POST['pass']; )
标签: php session login session-cookies logout