这可能是我知道的全网独家文章了...坏笑
首先说下具体情况,想先给学校实验室做个聚合系统,类似于宝塔官网,通过子目录把网站分成多个不同的模块,如bbs,ids系统等。
鉴于discuz 的代码太过臃肿,复杂,不利于二次开发,因此选用了 xiuno 作为本系统的bbs 底层代码...
说句个人意见,我不太喜欢宝塔官网把 后台,论坛,开发者中心的用户数据完全隔离的方案,我的想法是,用户既然登录了论坛,那么用户的信息应该是和其它子系统共享的,即seesion 共享机制,从这点上说,虽然一定程度上提高了安全风险,但是却能够大幅度提高用户的浏览体验。通过查阅xiuno 的 代码发现,xiuno 并不是直接原生使用php 的 seesion 变量的,而是通过自己改良的seesion 数据表对数据进行操作。百度搜索各大论坛,均未发现有明确指出如何共享利用xiuno 的 session 流的方法...因此只好自己上手摸索,经过长达2-3个小时的尝试,终于获得了成功。具体思路是在加载 xiuno 的入口文件之前,预先设置一个路由全局变量 ,然后在xiuno 的 index.inc.php 中,修改原先的路由函数,在路由全局变量不为空的情况下,给xiuno 的 路由赋值,并且在xiuno 的 route 文件夹下面添加一个新的路由模块,将xiuno 读取用户信息的函数略加修改添加到这个模块中来,就可以在外部调用,获得用户的信息了,么么哒
但是实际操作起来,还是有很多困难的,主要的坑如下
1.xiuno 默认cookie 写入地址为‘’,所以假设xiuno 处于 '\bbs' 目录下,那么cookie 就会被写入到 ‘\bbs’,从而在外部目录无法正常调用
2.xiuno php 的 session name 为 bbs_sid, cookie 位置也为 ‘’,同样会造成上诉问题
3.xiuno 的 session 默认开启了http cookie 安全,导致在浏览器中查看 cookie 会出现 画面一闪,cookie 为空的现象
4.(今天刚刚接触xiuno ,没有好好看文档)xiuno bbs 分为三个不同的运行模式 ,正常情况下,为了方便二次开发,需要将运行模式设置为 2
下面打包一份根据 xiuno 官网 4.0.4 正式版修改后的 压缩包,直接解压上传服务器,访问 /bbs目录正常安装xiuno ,然后访问 /demo 目录就可以看见 当前登录用户的信息了。
修改的文件 分别是
- index.php
- index.inc.php
- conf/conf.default.php
- route/sys.php
- model/session.func.php
大家可自行和官网版本比对... (话说可能是压缩算法问题,我压缩后的文件居然不官网还小...) 文件下载地址: xiunobbs_4.0.4_sessionshare_v1.0.zip
顺便感谢下 https://bbs.xiuno.com/thread-150897.htm 的帖主 ,大晚上两人一起写代码还是满
的 ...