Loading…
-
实现vertical-align的几种办法
Posted on 2011-07-07
一个简单的例子:
<div style="vertical-align: middle; height: 100px;"> <span>hello world!</span> </div>可以看到”hello world!”并没有垂直居中。网上有很多人从很多不同地方面进行分析,其实简单概括就一句话:
vertical-align的作用范围仅限标签(“display:table-cell”)或”display:inline-block”元素。 那么如何实现垂直居中呢?
最简单的方法,当父容器的高已知时,可以简单地设定要剧中的元素的line-height为父容器的高度即可实现垂直局中。如:
<div style="vertical-align: middle; height: 100px;"> <span style="line-height: 100px;">hello world!</span> </div>第二个方法,当父容器高度未知,子元素高度已知时,可以依次这样做:
- 设置父容器position:relative 或 position:absolute.
- 设置子元素position:absolute 且 top:50%.
- 设置子元素margin-top: -子元素高度的二分之一.
喜欢简单的方式?
喜欢简单的人们可以使用下面的javascript代码(需要jQuery),原理是在要垂直局中的元素外包一层:
$(function(){ $('.vertical-align-middle').wrapInner( '<table height="100%" width="100%"> <tr><td style="vertical-align: middle;"></td> </tr> </table>'); });注: 将要垂直居中的容器class设成vertical-align-middle即可,如前一例:
<div class="vertical-align-middle" style="height: 100px;"> <span>hello world!</span> </div>enjoy it!
-
PHP实现Singleton
Posted on 2011-06-17
什么是Singleton
The Singleton pattern applies to situations in which there needs to be a single instance of a class. The most common example of this is a database connection. Implementing this pattern allows a programmer to make this single instance easily accessible by many other objects.
目前的一个项目有几个模块需要实现Singleton,于是想实现一个Singleton基类来使这些模块通过继承该基类实现Singleton。
<?php class Singleton { protected static $instances; public static function getInstance() { if(!isset(self::$instances)) { self::$instances = new __CLASS__; } return self::$instances; } protected function __construct() { } protected function __clone() { } }这是一个Singleton的PHP实现,然而这时希望通过如下代码使Database类实现Singleton是不可行的:
<?php class Database extends Singleton { }因为__CLASS__获得的永远只是父类(Singleton)而不是子类,所以无法获知子类类信息,自然也就无法实现子类的单例。
PHP5.3 提供了get_called_class()函数,透过此函数可以实现Singleton的继承。
其它实现方式
为了能在PHP5.3以前实现Singleton的继承,我们可以定义一个静态数组来维护类的实例,定义以及使用方法如下:
<?php class Singleton { protected static $instances = array(); public static function getInstance($className) { if(!isset(self::$instances[$className])) { self::$instances[$className] = new $className; } return self::$instances[$className]; } protected function __construct() { } protected function __clone() { } } class Database extends Singleton { public function hello() { echo 'hello'; } } Singleton::getInstance('Database')->hello(); -
由一次恶意日志分享看人人的CSRF漏洞
Posted on 2011-05-14
前几天在人人上看到同学发的一条包含链接的状态,我随手点开这个链接,发现跳转到了人人上的一篇日志。当时没多想就关掉了,过一会儿再看自己的人人主页发现多了一条和同学一样内容的状态。我马上意识到与刚才日志有关,于是查看那篇日志的源代码,发现如下代码:
<img src="http://rrurl.cn/{……}/" height="0" />意识到src中的网址可能有问题,于是wget了一下,发现该网址会跳转到http://status.renren.com/doing/updateNew.do?content={……}。也就是说浏览器为了下载这幅”图像“,访问了updateNew.do,这样如果你已经登录了人人,就会自动发出状态。这就是一次典型的CSRF攻击。
什么是CSRF攻击?
CSRF – Cross-site Request Forgery 字面意思指跨站点请求伪造,也就是跨站漏洞攻击,通常用来指 WEB 网站的这一类漏洞,即在某个恶意站点的页面上,促使访问者请求你的网站的某个 URL(通常会用 POST 数据方式),从而达到改变服务器端数据的目的。这一类攻击依赖于你的网页中的表单,脆弱的表单很容易受到攻击。
解决方案
CSRF攻击相对来说比较容易让人忽视且难以防范。简单来讲可以采用以下方案尝试解决:
- 不允许通过GET方式提交数据
- 可以采用生成临时"session_key"来做单次验证,验证后即重置