默认情况下全站共用一个 PHPSESSID,前台用户和后台管理员写在同一个会话数组里,很容易出现越权隐患。
做法:切换会话名
function np_session_start($name) {
if (session_status() === PHP_SESSION_ACTIVE) {
if (session_name() === $name) return;
session_write_close();
}
session_name($name); // NPUSER / NPADMIN
session_start();
}前台页面调用 np_user_session(),后台页面调用 np_admin_session(),两边的 $_SESSION 互不可见。
再加两点
- 登录成功后
session_regenerate_id(true),防会话固定。 - Cookie 打开
httponly,JS 拿不到会话 ID。
前台登录态里只存邮箱和登录时间,没有任何多余信息,即使会话被拖走也拿不到隐私数据。