谢谢你的回复.我已经更新了我的
PHP会话代码.
我有一个(HTTPS)-login.PHP,它仍然是HTTPS,即用户登录后进入帐户仪表板.现在问题是用户登录仪表板时点击(HTTP)-about-us.PHP页面,会话不通过HTTP传输,因为我有session.cookie_secure = 1,那就是好用户出现了.但是,当用户返回仪表板页面时,他也会在HTTPS上注销?
我相信我错过了造成这个问题的事情.这是我的代码:
这是PHP头文件require()ed以启动会话,即在login.PHP页面上:
session_start(); session_regenerate_id(true); /*avoid session fixation attempt*/ /*Create and check how long session has been started (over 5 mins) regenerate id - avoid session hijack*/ if(!isset($_SESSION['CREATED'])) { $_SESSION['CREATED'] = time();/*time created session,ie from login/contact advertiser/email_confirm only ways for new session to start*/ } elseif(time() - $_SESSION['CREATED'] > 300) { /*session started more than 5 mins(300 secs) ago*/ session_regenerate_id(true); /*change session ID for the current session and invalidate old session ID*/ $_SESSION['CREATED'] = time(); /*update creation time*/ } /*Check if user is logged in*/ if(!isset($_SESSION['loggedin'])) { $_SESSION['loggedin']=1;/*used to track if user is logged in on pages*/ } /*if return false browser supports standard ob_start();*/ if(ob_start("ob_gzhandler")){ob_start();}
这是每个页面上的PHP头文件require()ed,用于检查会话是否已启动:
session_start(); $session_errors=0;/* if>0 user not logged in*/ /*check if session is already initiated*/ if(isset($_SESSION['CREATED'])) { if(time() - $_SESSION['CREATED'] > 300) { /*session started more than 5 mins(300 secs) ago*/ session_regenerate_id(true); /*change session ID for the current session and invalidate old session ID*/ $_SESSION['CREATED'] = time(); /*update creation time*/ } } elseif(!isset($_SESSION['CREATED'])){$session_errors++;}/*user not logged in*/ /*Check if user is logged in*/ if(!isset($_SESSION['loggedin'])){$session_errors++;}/*user not logged in*/ if(ob_start("ob_gzhandler")){ob_start();}
此外,如果有任何用途,这是在非敏感页面上转换HTTPS的代码,例如about-us.PHP
if ($_SERVER['SERVER_PORT']!=80) { $url = "http://". $_SERVER['SERVER_NAME'] . ":80".$_SERVER['REQUEST_URI']; header("Location: $url"); }
再次感谢任何帮助人员,daza166
如果使用ini_set(‘session.cookie_secure’,1);,如果连接已加密,则具有session-id的cookie将仅转移到服务器.因此,如果您强制用户通过不安全的http连接访问about-us.PHP,您的脚本将不会收到cookie,并且他将在页面上显示为logedout用户.您将无法访问任何会话变量.
但是,客户端上的cookie和服务器上的会话数据都不会被删除.因此,如果用户稍后(在会话的生命周期内和cookie中)访问您网站的加密页面,则会传输具有会话ID的现有cookie,并且他不必再次登录.简而言之,从HTTPS到HTTP并再次返回将不会注销用户.如果您不需要在未加密的页面上检查用户的登录状态,则设置cookie_secure是个好主意.
对于您的其他问题:在我看来,检查用户代理并不会显着提高安全级别,因为能够检索某人会话ID的黑客也不会在检索其用户代理字符串时遇到很多问题.检查id是有意义的,但如果用户ip因重新连接或更改代理而经常更改,则可能会导致问题.