在开始本节内容前,楠神做了一个重要修改。就是在进入后台页面和用户页面时,验证管理员和用户登录状态时,原先只是简单地依靠判断session中有没有下标为“admin”($_SESSION['admin'])和“user”($_SESSION['user'])的数组数据来标记用户有没有登录,其实这样做并不安全。楠神的改动是:
每次请求这些页面时,都要从session中获取相关信息与登录日志(存在数据库的)中的信息做匹配检查。发现不对(session中记载的登录IP、sessionID与登录日志中记载的不一样)或查不到相关的登录记录,那当前的管理员或用户处于异常登录,直接清空session(强制退出)。
这样做,是变复杂了,还增加了数据库地查询。好处是更安全了。最近楠神的网站被人入侵了,就是通过修改session直接登录了后台,原因一直没找到。所以我才换成了这种方式。
具体代码可看:
扩展类:app\extend\Session.php
一、点赞功能
控制器:app\home\controller\Upraise.php
模型:app\common\model\ForumPraise.php
有个地方,关于点赞数的更新:
虽然在“php_forum”表中有“praise”字段,每次点赞,只需要这个字段+1即可。前面积分的增加减少就是这样写的。后来经过思考,发现这样设计程序并不好。在做数据统计时,最好根据全部记录(日志)重新统计,而不是在原先基础上做加减。
一个帖子的“赞数”要求并不严谨,有误差影响不大。可用户的“积分”,有些论坛可以当作货币去使用,最好不要出现误差。而我们原先那样设计呢,不好的地方就是出现了误差不容易发现,不容易纠错。比如程序出错引起的某个用户积分增多,我们也不可能每天都肉眼核对下每个用户的总积分是否与积分日志中的相加得到的结果一样,某个用户的积分增多了也不会轻易地知道。假如知道了某个用户积分异常,修改起来也麻烦。
如果根据记录做统计,就好处理多了。只要记录是正确的,用户的总积分就正确。用户的积分异常只需要看下用户的积分日志有没有异常,如果有异常,只需要删除那条异常的记录,用户的总积分就更改过来。
当然程序不需要每次都统计,只有在更改积分时重新做统计,统计完的数再写入到“php_user”表中“score”字段,有需要读取用户总积分时,可从这个字段获取。
二、收藏功能
控制器:app\home\controller\Ucollection.php
模型:app\common\model\ForumCollection.php
视图文件:app\home\view\ucollection\*.html
三、关键字帖子列表功能
控制器:app\home\controller\Index.php
模型:app\common\model\KeywordsForum.php、Keywords.php
视图文件:app\home\view\index\*.html
主题帖添加关键字楠神也做了改动,原先只有一张“关键字表”,每个关键字关联的帖子ID全写到一个字段中,以“,”隔开。我发现这样在显示关键字列表时不好分页,所以又多使用一张关系表做关联。