存档

2010年3月 的存档

php使用cookie防止重复提交是不安全的

2010年3月20日 没有评论

最近在做一php项目时遇到需要检查重复提交的情况,搜索了一下发现一种做法是使用cookie来防止,起初一看还觉得可行,但细想以下发现在某些情况下是无法达到目标的。
  cookie这个东西是属于客户端的,在设置了cookie后每次访问浏览器都会将设置的cookie发送给服务器。用cookie来防止重复提交的做法是在访问需要提交信息的页面时设置一个cookie值,在接收的页面验证这个cookie值是否满足规则。
如下面的测试代码:
test0.php

< ?php
sleep(2);//模拟有延迟比较大的情况
if($_COOKIE['onlypost'] == 't'){
	setcookie("onlypost", 'f'); 
	if (isset ( $_POST ['msg'] )) {
		mysql_connect ( 'localhost', 'root', 'root' );
		mysql_select_db ( 'test' );
		mysql_query ( "insert into t_msg(msg) values('" . $_POST ['msg'] . "')" );
	}
    echo 'submit ok';
}else{
	echo 'submit error!';
}
?>

test1.php

< ?php 
setcookie("onlypost", 't'); 
?>
<form action="test0.php" method="post">
msg:<input type="text" name="msg"/><input type="submit"/>
</form>

测试数据表

CREATE TABLE `t_msg` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `msg` VARCHAR(50) ,
  PRIMARY KEY (`id`)
)

在访问test1.php时,如果用户的延迟比较大,填写信息后连续两次或多次点击提交按钮。因为在第一次提交后服务器还没有返回信息重设cookie,浏览器接下来发送的请求数据包中cookie的值始终是一样。
阅读全文…

分类: 高级民工 标签: ,

wordpress的缓存机制

2010年3月11日 1 条评论

  Wordpress缓存机制分为内置缓存机制和外部缓存插件两种方式。
  Wordpress从2.0起出现的cache.php实现了一个在WP内部的缓存机制。从代码上看其作用只能适当的减少在一次请求过程中SQL查询的次数,而不能如JAVA、ASP.NET那样实现驻留在内存中的缓存机制。这与PHP的特性有关,PHP是一种解释性的语言,其是无法驻留内存的,除非使用PHP相关的缓存插件。

  对于目前的wordpress缓存插件而言,都以生成静态页面的方式实现。如比较常用的wp_super_cache与cos_html_cache。
  开启这些高级的缓存存机制的一般要在wp-config.php中定义WP_CACHE,即:

define('WP_CACHE',true);

这样在wordpress的wp-setting.php中就会加载wp-content/advanced-cache.php。

wordpress内置缓存的工作原理与流程:

在一次请求过程中,如果开启了内置缓存机制,那么在执行一次查询时将会把一些数据通过cache.php中的wp_cache_set()方法来暂时存放。在这次请求中如果再次出现查询且满足一些逻辑上的条件,那么会先通过wp_cache_get()方法来查找缓存中的数据,如果存在那么直接取到,如果不存在再向数据库查询。这样就减少了一些对数据库的查询次数。不过需要注意的是这个缓存只是存在于本次请求周期中。

分类: 高级民工 标签: ,

PHP无MySQL拓展

2010年3月7日 没有评论

  今天在机器上搭建apache+php+mysql测试环境后安装wordpress出现“您的 PHP 似乎没有安装运行 WordPress 必须的 MySQL 拓展。”的提示。但明明extension=php_mysql.dll已经开启,环境变量也全部设置好了,怎么会出现这个问题呢。百思不得其解,搜索也找不到答案。后来来无疑中发现在PHP配置文件php.ini中的extension_dir参数,其说明为”; Directory in which the loadable extensions (modules) reside.”,大意就是模块的位置,默认是extension_dir=”./”改为extension_dir=”ext/”后wordpress正常安装.

分类: BLOG建设 标签: