*原创作品,欢迎转载,转载请保留作者和出处。
放暑假之前,在网上闲逛,不知怎么的就逛到了CoolCode.CN,看到了andot老师的文章《安全登录系统的设计与实现方案》,深受启发,决定将其进行实际应用。但是文章中仅仅指出了大致的流程,并没有描述具体操作方法。经过一下午+一晚上的摸索,终于将其实现。本文就将介绍我在实践过程中的一些感想和经验。 继续阅读Ajax+PHP实现安全登录
*原创作品,欢迎转载,转载请保留作者和出处。
放暑假之前,在网上闲逛,不知怎么的就逛到了CoolCode.CN,看到了andot老师的文章《安全登录系统的设计与实现方案》,深受启发,决定将其进行实际应用。但是文章中仅仅指出了大致的流程,并没有描述具体操作方法。经过一下午+一晚上的摸索,终于将其实现。本文就将介绍我在实践过程中的一些感想和经验。 继续阅读Ajax+PHP实现安全登录
今天听秋实说,他写好Blog之后没有备份,提交失败后文字全部浮云。于是我立即想起了以前数次类似的“惨痛教训”。于是就在Blog程序的编辑器中加入了自动将内容备份到剪贴板的功能。这样,除非系统崩溃剪贴板中的内容消失,否则浏览器崩溃(尤其是Maxthon)、网络断流等等的问题都可以轻松应付。
其实将值复制到剪贴板非常简单,只需要一句Javascript即可。代码如下:setData方法的第一个参数是数据类型,可以是URL或者Text,使用Text会将内容存储为文本格式。第二个参数是要复制到剪贴板里的内容,这里指定为document.input.message.value的意思是name为“input”的表单中的name为“messgae”的文本框中的内容(value)。
window.clipboardData.setData('Text', document.input.message.value);
只要将这段代码加在表单的onSubmit属性中即可,这样就能做到表单提交的时候自动执行这段代码,将文本框的内容复制到剪贴板,免得出现辛苦写的东西全部浮云的“囧”境。
其实这段代码只要稍加变通,即可实现更加丰富的功能。
将上面的代码放进函数,方便调用:之后再在页面中加入:
function backup_msg2clip() {
window.clipboardData.setData('Text', document.input.message.value);
}通过setInterval方法设定每10(把10000改成600000就是60秒了)秒钟执行一次backup_msg2clip(),这样就相当于每10秒钟备份一次。但是这样也有缺点,那就是在编写文章的时候,剪贴板被文章内容独占,如果此时想从别的文章中copy一些内容过来,那可真要做到“眼疾手快”,要在10秒钟内ctrl+c,回到编辑器再ctrl+v,可真够紧张的。
window.setInterval("backup_msg2clip()",10000);
既然这样,我们就同样将上面代码放进函数,只在需要的时候执行。之后再创建一个链接:
function start_backup() {
window.setInterval("backup_msg2clip()",10000);
}只有点击这个链接后,自动备份功能才会启动。
<A href="javascript:start_backup()">(每10秒钟自动将内容备份至剪贴板)</a>
如果觉得这样还不保险,可以通过#default#savehistory防止后退清空文本框。
在表单的HTML标签中加入style属性,值为“behavior:url(#default#savehistory);”,这样提交表单之后再后退,文本框就不会被清空,依然保持着提交之前的样子。
怎么样,如此一来,无论是在CMS还是Blog中写东西,安全感都大多了吧。
题外话:
今天更新了Waki-Blog,除了前面提到的后台编辑器更新以外,还修改了bbcode解析部分。解析code代码的时候,自动将代码中引号前面的斜杠去掉,并将特殊字符转换为html标号,以防止引用的代码中的html语句被浏览器执行。
前天,也就是9月18号,是Waki-Blog诞生三个月的日子。三个月中,Waki-Blog从Beta1走到了Beta3,刚好差不多每个月更换一次版本,功能也从简单到多样,最初的加入TB、RSS输出、存档,到后来的反SPAM、敏感关键词过滤、支持留言,之后又是部分功能的Ajax化、Tags无限分类,还有好玩的顶部最近状态跑马灯等等的。终于,Beta3经过8次比较大的更改,到了Beta3 v8。
今天,Waki-Blog迎来了它的第一个正式版——Waki-Blog 1.0,是不是值得纪念一下呢?
Waki-Blog 1.0 更新:
1.更换前台模板。前台的模板从Open WEB Design获得,可以自由使用。侧边栏去掉了花花绿绿的订阅图标,只保留RSS链接和抓虾的订阅链接,整个页面统一为蓝、灰、黑色调,看起来感觉很养眼~HOHO。同时,将Tgas移动到顶端导航栏,突出无限分类地位。感谢Feilong Huang设计并共享了这么漂亮的模板(遗憾的是他的网站现在好像无法访问)!
此外,还在模板头信息中加入了关键字、简介、作者等描述信息。
2.更改了文章列表页摘要提示的显示方式为“(以上为摘要,请阅读全文)”。
3.增加了RSS托管功能,当使用Feedsky或者Feedburn等RSS Feed托管将RSS托管的时候,可以单独设置页面链接中的RSS地址。如果没有设置RSS输出托管,则全部RSS链接到默认输出的rss.xml。
此外,还有正在计划制作的可由用户自行选择喜欢的模板的多模板功能。
其实前两天就更新了Beta3 v1 -,- 这个版本只是作为Beta3的一个初级版本(即分类功能的实际测试版本),只加入了分类功能。v2作为一个更正错误和优化用户体验的版本,对模板和程序进行了一系列调整,让程序用起来“更舒服”。
更新:
1.支持无限分类功能,每篇文章可以从属于多个分类,也可以不属于任何分类。并采用缓存技术来降低数据库负担。
2.更新了存档列表的生成。没有Blog的月份不会声称缓存列表,存档日期后面有该月份日志数量的显示。
3.更正了存档月份字符串分析函数中的一个重大错误,该错误将导致每年12月份的存档显示不正常(还好还没到12月份)。
4.存档页面文章由时间逆序排列改为时间顺序排列。即原来的排列方式为每月31日到1日,现在改为1日到31日。
嗯……每天写Blog的确很辛苦呢。
这几天要开发Waki-Blog的标签分类功能,所以这几天会非常忙,不一定抽得出时间来每天写文章,所以只好先把Blog放下,专心弄程序方面事情。
所谓的标签分类功能:
1.有若干互不相关的分类;
2.每篇文章可以不属于任何分类,可以只属于一个分类,也可以同时属于很多分类;
3.Blog文章的浏览界面要要显示其所属的分类;
4.侧边栏要有分类列表,点击之后可以列出其下属的Blog文章;
5.因为无限标签分类很可能给数据库带来比较大的压力,所以要严格限制数据库查询增加的次数,不能比现在程序的查询次数增加两次以上,所以可能要增加一些缓存功能。
这就是前台部分的要求,当然,后台要有对应的添加、编辑文章所属分类和添加编辑删除分类的功能。
表面上看上去简单,但是实际上却非常麻烦。首先是数据库结构的安排,其次是数据库查询的安排,之后是缓存的设计,最后是后台编辑、修改的实现。参考了一下国内现有的Bo-Blog等程序的实现方式,总觉得不是太理想,所以正在争取想出来更好的方法来实现这个功能。
目前程序结构和数据库结构已经有了大致想法,实验用的数据库也建立好了,接下来就是努力堆代码,并进行必要的测试了。
昨天晚上(应该说今天早晨)睡不着觉,就在服务器上面瞎折腾。
突发奇想想弄一个SSL安全连接,在网上找到了相关的教程,教程里面提到了Apache 2.2.2,我回头一看服务器,才2.0.53,哇,原来我已经落后这么多了,赶快升级。上Apache的网站上一看,哦,原来已经有2.2.3了,看来落后的不止我一个人(五十步笑百步?)。以迅雷不及掩耳盗铃的速度下载好了Apache,备份httpd.conf,安装至2.0的目录(事实证明,没有先拆卸2.0是最大的失误,最终导致服务混乱)。
咦?无法启动?mod_access.so模块无法加载……-o-郁闷了……先不管他,继续,”Cannot load C:/php/php5apache2.dll into server: The specified module could not be found.”看到这句话我彻底囧了,这到底怎么回事,今天Apache存心跟我作对不成。
不管了,先屏蔽掉php模块和access模块,启动……起是起来了,但是没有PHP哪行啊。于是又把PHP加回去,再次出现错误提示,郁闷了,“C:/php/php5apache2.dll”路径没有问题啊,怎么会The specified module could not be found呢。升级PHP到最新版本也不管用。
后来只好上Google,搜索关键字“PHP Apache Cannot load php5apache2.dll into server”(好长……不过这么搜索的话命中率应该是最好的),终于找到了原因,“PHP压缩包里的php5apache2.dll只适用于apache2.0.x”。
终于恍然大悟,原来Apache 2.2 + PHP5以模块方式运行是不行滴~然而我又不喜欢CGI方式,看来只能装回2.0了。接下来让我郁闷的事情又发生了。进入系统服务查看,里面竟然有两个Apache服务,一个是Apache2,另一个是Apache 2.2……我狂郁闷。拆卸2.2,这下Apache 2.2不见了,但是Apache2还在。不管了,安装Apache 2.0.59,将备份的httpd.conf覆盖回去,进入系统服务准备启动服务,爆郁闷的一幕再次发生了,应该已经拆卸掉了的Apache 2.2又回来了……
不管这个幽灵2.2了,启动Apache2服务,还好顺利启动成功,看了一下php模块和access模块,都没有问题,事情还算圆满解决。
折腾到这份上,当初SSL的想法早就冷了一多半,而且也没那个胆量去折腾了。马上就要回学校了,万一弄瘫痪了恢复不了可就不好玩了。
我在网上找到了一种解决这个兼容问题的方法:
下载 这个文件 并解压.共有三个文件.
vcredist_x86.exe
php5apache2.dll
httpd.exe.manifest好,开始
1.将 php5apache2.dll 覆盖掉你原来PHP目录下的 php5apache2.dll 文件.
2.将 httpd.exe.manifest 文件复制到你的apache安装目录下的bin文件夹下.
3.双击运行vcredist_x86.exe安装.(如果您的系统里已安装了 .NET framework 2.就可以省掉这一步)完成!去重启你的apache2.2试试吧.
不过我没有试,一来毕竟不是官方的解决方法,不晓得会出现什么问题,二来竟然还要装.NET framework 2,太麻烦。还是等新版本的PHP5放出吧。
经验教训:
1.升级软件之前一定要被分好旧版本的配置文件之类的东西。
2.升级软件之前拆卸旧版本,是非常好的习惯。虽然不少程序直接覆盖安装也不会有问题,但是为了最大限度地保证兼容性和稳定性,还是推荐先拆卸掉旧版本。
最近刚发现聚合是一个非常方便的工具。 继续阅读烧制与聚合
最近两天调整了一下Waki-Blog程序,主要有一下几个方面:
1.RSS输出加入了换行。之后考虑改为全文输出+BBCODE代码解析。至少现在还没做好那样做的心里和物质准备 囧。
2.存档栏改为Ajax。这样可以剩下一个包含文件…间接提高了程序的效率。新的存档栏采用JavaScript读取XML显示。XML是由程序生成的,每次更新Blog的时候都检查是否有必要更新缓存与XML。以后页面可能会继续Ajax化。
由于Ajax的实现效果可能与浏览器有密切关系,所以可能会出现在不同浏览器中的兼容性问题。若您在浏览过程中出现问题,请联系我。目前测试过程中,FireFox尚未发现兼容性问题。使用IE浏览的过程中,第一次访问能顺利显示存档栏,但如果刷新的话就会出现存档栏无法显示的问题。
3.优化了缓存结构,节省一次数据库查询。
在Waki-Blog中不打算使用太多缓存,不然数据的同步与即时性就成了很大的问题。其实只要打开SuperTPL的静态页面功能,前台100%的页面都可以实现数据库0查询,甚至可以连缓存数据都不访问直接输出HTML,但是做到这一点却需要在后台和模板引擎中加入大量的代码来维护、同步缓存数据,得不偿失。
今天小小更新了一下Waki-Blog,主要有以下几个方面:
1.修改了一下数据库结构,blog表增加一个字段cmds,记录该条Blog的评论数。
2.修改了Blog阅读页面的数据库查询,如果没有评论/Trackback的话,就不查询数据库,阅读既没有TB也没有评论的Blog的时候,可以节省两次数据库查询和两次循环。在某种意义上解决了Blog阅读页面的数据库查询稍多的情况。当然,如果有TB/评论,该查的还是得查= =||
3.增加了删除评论的功能。现在删除评论不用再跑到phpMyAdmin里面了~HOHO~网页的中的JavaScript借用了Z-Blog中的代码。这里感谢一下~HOHO