美好的一天,
我有一个小但不重要的问题。 创建了一个SESSION类,一般来说它工作得很好。
然而由于一些奇怪的原因,偶尔会开始怪癖,并为每个不同的页面/文件夹生成一个单独的sessionID。
情况如下。
我在自己的框架中使用Session类。 我的框架使用基于目录结构的路由。
如:
我是在 .htaccess 文件的帮助下完成的。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ core/ [L]
# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) core/$1 [L]
</IfModule>
我尝试将所有流量路由到文件夹/core/index.php中的文件 在这里,我加载了所有模块和会话类。
问题
一般来说它运行良好。但是在常规的基础上(偶尔) 我登录后将用户从登录页面转发到起始页面。 在那里,它检测到用户尚未登录并转发他 回到登录页面。
所以你有一个域名。但是系统生成多个会话ID的多个文件夹
#1用户登录:
生成1个会话ID
2登录检查
3用户登录数据获取 注册资格
4用户转到下一页
#2用户到达:
http://domain.com/start/
应该保留1个会话ID。但 由于某种原因得到了再生 2用户无法进行身份验证和 转发到上一页
#3用户到达:
http://domain.com/login/
找到1个原始会话ID
2用户 使用存储在会话中的数据进行身份验证并转发到下一个 页
#4用户返回开始页面并再次找到另一个会话ID等。
我在开始会话前使用以下设置:
ini_set('session.cookie_lifetime', 432000);
///ini_set('session.cookie_path', false); /// Disabled this option because this should be causing this issue. But to no avail unfortunately.
ini_set('session.cookie_domain', 'domain.com');
ini_set('session.cookie_secure', false);
ini_set('session.cookie_httponly', true);
ini_set('session.gc_probability', 0);
我想知道我可能犯了什么错误。 会话课当然要大得多。但我认为整体发布它会太大了。 如果对特定部分有任何疑问,我会发布。
希望有人能看到我的错误。 提前谢谢!
此时我通过删除所有域会话cookie来解决此问题。 然后我再次加载http://domain.com/login/并登录,一切都运行正常。但是在几天之后问题又出现了。
会话文件内容:
SessionIPaddress|s:9:"127.0.0.1";SessionuserAgent|s:72:"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0";Parking_loggedin|b:1;Parking_user|s:1:"1";Parking_level|s:1:"1";
指向文件的gitHub链接
答案 0 :(得分:2)
大量的注释使得代码不会更多,但可读性更低。没有所有注释,文件只有~350行而不是714.更容易掌握较短文件的整体意图。很多评论也只是代码的重写,这些甚至都没有帮助。例如return(false)
为自己说话,不得注释。
您正在复制PHP功能,尤其是有关cookie处理的问题。这已经由PHP完成了。
您正在WriteSession
创建一个文件,该文件不包含会话数据,因此有点误导。 (会话数据实际上是由核心PHP函数保存的。)该文件只包含一些数据来检查会话,可能是为了防止劫持,但它没有明确用于防止劫持。通过检查存储在会话中的数据(正确的方式!)来防止劫持,因此不需要附加文件。 (请注意,一些代理在浏览您的网站时切换IP,因此检查完整的IPv4可能会让访问者感到烦恼。)
__get
/ __set
)混合。请务必至少在您的脑海中将这两个方面分开,甚至将它们分成两个类。
session_start
周围的所有内容,例如劫持预防,破坏会话,......并且不应该写入/检索任何数据。它应该完全基于$_SESSION
。$_SESSION
。