把Mobile Detect类库作为一个组件引入到Yii2里面去。首先需要先用Composer安装Mobile Detect:composer require mobiledetect/mobiledetectlib。然后新建一个DeviceDetect类:<?php
namespace common\service;
use Yii;
use yii\base\Object;
use Detection\MobileDetect;
/**
* 移动设备检测功能
* @link http://mobiledetect.net/
* @link https://www.360us.net/
*
* @example
* //注册一个检测移动设备组件
* Yii::$app->set('deviceDetect', [
* 'class' => 'common\service\DeviceDetect',
* ]);
* //使用
* Yii::$app->deviceDetect->isMobile();
*
* Cl...
发布日期:
2015-12-01
分类:
PHP
浏览量:
3773
阅读全文
mysql的utf8并不是完整的utf8,只能存储最多三个字节的字符,而完整的utf8编码是一个字符最多可以占用4个字节的。这就导致一些4个字节的字符不能存进utf8编码的表里面,比如emoji表情符号。mysql5.5.3版本的时候新增了一个新的字符集,叫做utf8mb4,这个就是真正的utf8编码的,也可以直接存储emoji表情符号。utf8mb4的字符范围是包含utf8的,所以,我们可以直接把当前数据库的编码转换成utf8mb4,不会有任何问题。为了避免以后因为字符范围而导致的问题,我们在新建数据库的时候也应该用utf8mb4代替utf8作为默认的字符编码。校验规则的话utf8mb4_general_ci和utf8mb4_unicode_ci都是可以得,mysql默认是前者,前者校验速度较快,后者则更准确一点。那么如何把当前数据库的编码由utf8转换为utf8mb4呢?我们需要下面几步:首先,我们先备份下原来的数据库,是吧?为了保险起见。然后呢!再核对下msyql的版本号,如果版本低于5.5.3的话就先升级一下吧!第三步,修改数据库,表和列,数量少的话可以直接执行sql语句:#修...
1、验证码验证码被认为是对抗CSRF攻击最简洁而有效的防御方法CSRF攻击的过程,往往是在用户不知情的情况下构造了网络请求。而验证码,则强制用户必须与应用交互,才能完成最终请求。因此,在通常情况下,验证码能够很好地遏制CSRF攻击。通常我们不可能在所有地方都加上验证码,所有这个也只能作为一种辅助手段。2、Referer Check就是检查请求的来源,这个还可以用来做图片的防盗链。Referer是由浏览器通过HTTP头来发送的。但是,这个头也不是什么时候都有的,很多情况下都是没有的,还可以通过程序来自定义。这个也只能作为一个辅助手段。3、Anti CSRF Token防御CSRF的主要方法是使用一个Token。CSRF的本质原因就是重要操作的所有参数都能被攻击者猜测到。攻击者只有预测出一个URL的所有参数与参数值,才能成功构造出一个伪造的请求,反之,攻击者无法攻击成功。因此我们可以在每个请求上面新家一个token参数,这个token是随机的,不可预测的,并且只有用户和服务器知晓,不能被第三方获取。提交请求时,服务器只需验证请求中的token是否存在及合法就可以了。Token的几个使用原则...
发布日期:
2015-07-28
分类:
其他
浏览量:
4843
阅读全文
1、HttpOnlyHttpOnly最早由微软提出,并在IE6中实现,至今已经逐渐成为一个标准。浏览器将禁止页面的javascript访问带有HttpOnly属性的Cookie。严格来说,HttpOnly并非为了对抗XSS,HttpOnly解决的是XSS后的Cookie劫持攻击。PHP设置带HttpOnly属性Cookie的方法是使用自带的setcookie函数:setcookie('PHPSESSID', '79ce945e3bfd1917919e63a7ddbfe385', null, null, null, null, true);最后一个参数是设置httponly属性,执行后服务器会发送如下设置cookie的头:Set-Cookie:PHPSESSID=79ce945e3bfd1917919e63a7ddbfe385; path=/; HttpOnly2、输入检查常见的Web漏洞如XSS、SQL注入等,都要求攻击这构造一些特殊字符,这些特殊字符可能是正常用户不会用到的,所有输入检查就有存在的必要了。输入检查,在很多时候也被用于格式检查。例如网站注册使用的用户名,会被要求只能用字...
发布日期:
2015-07-27
分类:
其他
浏览量:
4832
阅读全文
1、定位执行效率较低的sql语句通常有两种方法。一种是慢查询日志,用--log-slow-queries[=file_name]启动时,mysql会记录所有执行时间超过long_query_time秒的sql语句的日志文件。 long_query_time参数单位时秒,精度可以精确到微秒,默认情况下管理语句和不使用索引进行查询的语句是不会记录的,如果要记录这两类sql语句可以用--log-slow-admin-statements和log_queries_not_using_indexes来控制。还有一种方法就是使用show processlist命令查看当前mysql在进行的线程,包括线程的状态,是否锁表等,实时的查看sql的执行情况,同时对锁表操作进行优化。2、通过explain分析低效sql的执行计划 explain命令可以获取mysql的执行计划。执行如下命令:EXPLAIN SELECT * FROM `user` WHERE `uid`=1会显示: id: 1
select_type: SIMPLE
table: user
...
服务器端:package main
import (
"bufio"
"bytes"
"fmt"
"net"
"os"
"strconv"
"time"
)
var User map[string]*net.TCPConn
func main() {
var tcpAddr *net.TCPAddr
var tcpListen *net.TCPListener
var tcpConn *net.TCPConn
var err error
User = make(map[string]*net.TCPConn)
//监听端口
tcpAddr, err = net.ResolveTCPAddr("tcp4", ":5000")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
//监听
tcpListen, err = net.ListenTCP("tcp4", t...
发布日期:
2015-06-30
分类:
Go
浏览量:
3898
阅读全文
这是一份写HTML的样板,每写一个新的HTML页面都可以用它来初始化。<!--
HTML5. Use tags like <article>, <section>, etc.
See: http://www.sitepoint.com/web-foundations/doctypes/
-->
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<!--
Ask IE to behave like a modern browser
See: https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible
-->
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>My Site</title>
...
pjax=ajax + pushState。像github上面点击一个链接都会有个load的动画,github用的就是pjax加载的这些链接内容。这里用jQuery的pjax库:jquery-pjax.js,github地址:https://github.com/defunkt/jquery-pjax最基础的用法:$(document).pjax('a', '#pjax-container')会在本页面的所有a链接上面启用pjax,内容替换的容器是id为pjax-container的元素,也可以是一个class的元素。上面这句话会使页面上所有的a链接都启用pjax,但是如果我只想部分链接启用呢?我们可以给a元素加上data-pjax属性,然后选择器写上a[data-pjax],这样就只有类似<a data-pjax href=""></a>的链接才会启用pjax。pjax函数的原型:$(document).pjax(selector, [container], options)第一个参数selector是一个字符串,代表一个可以被点击的元素。第二个参数是选择器字...
yii2的程序功能测试yii2集成了Codeception测试框架,所以是官方支持程序的单元测试,功能测试和验收测试。yii2的基本应用模板和高级应用模板都支持这三种测试。测试文件是在tests目录,很明显。这里主要是介绍怎么来用框架提供的这个测试功能。第一步安装Codeception:composer global require "codeception/codeception=2.0.*"
composer global require "codeception/specify=*"
composer global require "codeception/verify=*"第二步是添加全局命令执行命令composer global status,命令的输出应该会有一个目录,类似如下输出:Changed current directory to <directory>把<directory>/vendor/bin添加到系统环境变量path里面,这样做的目的是可以全局执行codecept命令。第三部是安装依赖包在项目根目录,就是有composer.json文...
发布日期:
2015-06-02
分类:
PHP
浏览量:
6720
阅读全文
文章是翻译自Go官方博客的文章:http://blog.golang.org/errors-are-values随便翻译的一下,给自己参考,有需要的同学也可以参考参考,翻译的不好的地方或者难以理解的地方请参考原文。本人英语本身也不怎么样!所有有可能会有理解错误,用词不当,语言组织不当的地方,请见谅!该怎么样去处理错误(errors),是go程序员特别是刚学go的人之间的一个共同讨论点。讨论经常会随着下面这段程序出现的次数越来越多而变成抱怨。if err != nil {
return err
}我们最近扫描了所有我们能够找到的开源项目,发现重复出现这段代码的次数是每页或者每两页只出现了一次,是不是比你想象中的要少很多。然而,如果你还是感觉必须到处写if err != nil,那一定是哪里出了问题,并且会认为问题很明显是出在go自己身上。很不幸,这是错误的,而且这很容易去纠正。假如一个新手go程序员去提问这发生了什么,“怎么会只有一个错误处理?”,其实你应该学习这种模式,并且保持它。在其他编程语言里面,一种可能方式是使用try-catch块或者其他类似原理的方式去处理错误(err...
发布日期:
2015-05-24
分类:
Go
浏览量:
4378
阅读全文