PHP会话安全密钥步骤
问题描述:
我在登录到系统后正在努力使用PHP
登录和用户验证。我知道基础知识,但我不确定我是否做得对。我会尽力一步一步解释它。PHP会话安全密钥步骤
- 我有一个用户名和密码的表单。
- 用户输入他们的登录名和密码后,我使用
LDAP
验证来授权他们。如果认证通过,那么我需要开始新的会话。 -
新的会议(这是我奋斗的地方)。
if ($validation->ldap_authentication()) { $session = new session(); $session -> login($validation->getUsername(), $validation->logedAs(), $validation->getSID()); if($session->validate_login()) { exit(header('Location:index2.php')); } else { echo 'error'; } }
而且我session class
:
class session
{
public function __construct()
{
if(!isset($_SESSION))
{
session_name(SESSIONNAME);
ob_start();
session_start();
} else {
session_regenerate_id(true) ;
}
}
public function login($sessionUserName, $logedAs, $sid)
{
$_SESSION['logedUserName'] = isset($sessionUserName) ? $sessionUserName : null;
$_SESSION['logedAs'] = isset($logedAs) ? $logedAs : null;
$_SESSION['sid'] = isset($sid) ? $sid : null;
}
public function validate_login()
{
if (!isset($_SESSION['logedUserName']) || (trim($_SESSION['logedUserName']) == '') ||
!isset($_SESSION['logedAs']) || (trim($_SESSION['logedAs']) == '') ||
!isset($_SESSION['sid']) || (trim($_SESSION['sid']) == '')
)
{
return false;
} else {
return true;
}
}
}
- 因此,在另一个页面,我需要(再次)开始授课
session
和验证validate_login()
? - 对我来说,它看起来真的很差认证。
我需要添加和改进什么?
我已经在网上搜索,但无法找到答案,也不知道我究竟需要改进什么。
答
我是一个PHP开发者,所以我的答案可能毫无价值。
我想你可以信任存储在$_SESSION
中的变量,因为只有服务器可以访问它们。所以你可以有一个布尔值$_SESSION['loggedIn']
,让你知道用户已经成功完成了登录过程,并且这个变量可以从任何页面访问。
第一:我不明白你为什么只在没有会话被设置时才执行'ob_start()'?第二个'session_regenerate_id()'应该每个请求只调用一次,你的代码在'session'的每个新实例上都执行它''http://*.com/questions/22965067/when-and-why-i-should-use-session -regenerate-id#22965580 – JustOnUnderMillions
我建议你通过一次会话的概念。所有你需要做的就是检查会话是否存在,如果不是重定向到登录屏幕,如果是,然后重定向到索引或任何你想要的。您可以添加一个检查,如果$ _SESSION ['logedUserName']'为空,则登录屏幕继续。 – Aatman
@JustOnUnderMillions所以如果我明白我需要调用'session_regenerate_id(true)'如果validate_login为真? – user3686909