cookie相关知识点总结

编    写:袁    亮
时    间:2015-01-15
说    明:cookie相关知识点总结

一、说明
1、http协议是无状态的,每一次请求之间互相独立,为了区分不同的客户端、用户,采用cookie进行标识
2、cookie内容保存在本地txt文件中,类似如下(火狐的):
.ci123.com    TRUE    /flashsale/sadmin    FALSE    1451097200    vip_plat    test3
作用域名        httponly 作用路径            https    过期时间     cookie名     cookie值

二、生存周期
1、服务端设置一个cookie,在http响应头里,会有一个头信息叫set-cookie的
在header头输出之前,不能有任何输出,因此setcookie之前也不能有任何输出
2、浏览器收到该头信息,会写入到客户端的cookie文件中
3、下次发起请求时,会将符合条件的cookie,从本地文件夹中将cookie字符串读取,拼接到http请求头里
只会发送未到过期时间的cookie
该时间以客户端机器为准(因此有时候会出现cookie设置不起来,因为用户电脑的时间不对,导致设置的cookie一直都是已经过期了的)
4、服务器接到http头信息里的cookie数据,将其格式化成相应的cookie数组
同名的cookie只有第一个有效,后面无用(顺序由浏览器根据相应策略决定)

结论:当前页面设置了cookie,本页面是取不到该cookie的,明白了上述流程自然清楚

三、php使用
1、设置cookie:
setcookie(name,value,expire,path,domain,secure,httponly);
2、删除cookie:(跟设置的时候保持一直,只将值设为空即可)
setcookie(name,'',expire,path,domain,secure,httponly);
3、获取cookie:
$val = $_GET['name'];

name:cookie的名称
value:cookie的值(没有值的时候,则注销该cookie)
expire:过期时间,unix时间戳(默认是0,会话,浏览器关闭则失效)
path:在域名的哪个目录下起效
默认只在设置的那个网址目录以及其子目录下有效
比如local.ci123.com/bbs/sub/post_add_sub.php中设置的一个cookie,默认只在/bbs/sub/以及其子目录下有效
domain:在哪个域下有效(只有域名的右前缀值有效,不是随便设置的
test.shop.ci123.com只能设置test.shop.ci123.com,shop.ci123.com,.ci123.com这三个值,默认是test.shop.ci123.com
secure:是否只能通过https发送(很少用,一般都是false)
httponly:js是否可以读取该cookie,一般不允许(设为true)

四、同名cookie
1、cookie名称并不能唯一的标识一个cookie,由三个东西唯一确定:cookie名+作用域(domain)+作用路径(path)
2、cookie名相同的情况下,浏览器会根据一定策略,重新排列cookie字符串,并发送给服务器,服务器只认第一个
1、作用路径顺序(在域名判断之前)
shop.ci123.com/flashsale/访问的时候有两个同名cookie,分别在以下作用路径,则/flashsale/有效
/flashsale
/
2、域名顺序
shop.ci123.com访问的时候有两个同名cookie,分别在以下作用域名,则shop.ci123.com有效
shop.ci123.com
ci123.com

五、工具
firefox的新版firebug插件就集成了cookie插件
chrome也有直接查看cookie的(网址左边的图标)

六、session与cookie的关系
session存储在服务端
一般是通过cookie来标识(不改默认配置的话,是叫PHPSESSID)

Mysql默认值

编    写:袁    亮
时    间:2014-11-17
说    明:Mysql默认值

1、默认值default设置
1.1 有设置:默认值
1.2 未设置:无

2、是否允许NULL值设置:
2.1 允许有(NULL)
default有值则为设置的默认值
default无值,则为NULL
2.2 不允许(NOT NULL)
default有值,而且不为NULL,则默认值为设置的值
default无值,则为对应字段类型的默认值(字符串的空字符串,整型的0)

3、自增长设置:AUTO_INCREMENT
3.1 不受default和是否允许NULL影响

4、时间戳:timestamp
4.1 默认为当前时间

内存不足导致sql执行过慢

编    写:袁    亮
时    间:2014-05-08
说    明:内存不足导致sql执行过慢

一、问题描述
1、某条sql执行了37秒
2、看慢日志里,被锁的时间在万分之几秒,因此不是因为被锁从而导致执行慢

二、问题分析
1、经与其他人沟通,可能是因为内存不足,导致索引没有加载到内存里,所以比较慢
mysql的所有会部分加载到内存里,如果内存不足的时候,会根据一定的策略将部分数据去除,重新读入数据到内存中
该内存大小设置可通过:show variables like '%key%';
然后设置set global key_buffer_size=2048000000;(2G)将该值改大
2、另外一种可能是在那个时间点,磁盘io有问题,从而导致读取数据变慢
但是如果是磁盘io卡住的话,那么那个时间点的其他sql应该也会卡,而看慢日志里,附近时间点并没有其他的慢查询
查看那个时间点的io,正常

三、总结
1、mysql启动或者重启的时候,因为要把索引加载到内存中,刚重启的时候,可能会导致服务器的io等负载过高,重启就挂
2、mysql一般来说,不能直接关,关掉之后,会需要修复表
3、有些时候,会执行的很慢,很有可能就是内存给的不够,一般4个G,机器较好的话,可以给4G

关于mysql截断内容问题

袁亮,2014-03-14,关于mysql截断内容问题解决

 

  • 问题描述:
  • 当用户发表有某些特殊字符的内容时,存入mysql数据库的内容会被截断

2、数据库、程序文件等都是utf-8编码

3、确认sql正常

 

  • 原因:
  • mysql中utf8编码最多只能是3个字节(5.3版本后,有utf8mb4类型可支持4个字节的utf8)
  • utf8是一种1-4个字节的可变字符编码(英文1个字符,汉字3个字符)
  • 某些特殊字符(emoji表情符号等)是4字节的utf8编码
  • Mysql在遇到超过最大字节范围的字符时,会忽略其后面的字符串,从而导致内容丢失

 

  • 解决思路:
  • 升级mysql到5.3版本以上,并将字段的编码设置为utf8mb4类型
  • 通过程序,将字符串中4字节的utf8字符替换或者删除即可

 

  • 剔除utf8字符串中4字节的字符方法:

[code]

function removeByte4($str){

return preg_replace('/[\xF0-\xF7].../s','', $str);

}

[/code]

性能:台式机,4.6W字符,0.006s,对程序性能影响基本可以忽略

 

附:(其他的一些相关知识)

 

  • Utf8 4字节各系统的支持情况:

1、windows xp: xp系统不支持4字节utf8字符, 浏览器用占位符显示

2、windows 7: 支持4字节utf8字符

3、mac os x: 支持4字节utf8字符

4、iPhone/iPad: 支持4字节utf8字符

 

1、将特殊的4字节字符用相应的图片表情代替

2、替换的时候,注意不要堵塞用户的处理流程,当文本内容较长时,这是一个很耗性能的处理,建议先忽略4字节字符,然后将内容存到文件或者其他地方,后续使用脚本对这些内容进行替换处理等操作。

3、新浪微博等有做相应处理

4、特殊符合以及对应表情可参考网站:http://www.charbase.com/

  • 四种不同剔除utf8字符串中4字节字符的性能比对:

测试机:普通pc 测试文本:4.6W字节的中英文、特殊字符等混合

  • 极快,推荐使用:006s

function removeByte4($str){

return preg_replace('/[\xF0-\xF7].../s','', $str);

}

 

  • 较慢,参考用:2s

function removeByte4_2($str){

return preg_replace('/[\x{10000}-\x{10FFFF}]/u','', $str);

}

  • 慢,但方便对特殊字符做不同替换:3s

function removeByte4_1($str){//移除utf-8编码中4字节及以上的字符

mb_internal_encoding("UTF-8");

$len = mb_strlen($str);

$res = '';

for($i=0;$i<$len;$i++){

$t = mb_substr($str,$i,1);

$res .= strlen($t)<=3?$t:'';

}

return $res;

}

  • 极慢,不具使用价值,仅参考:9s

function remove_4_byte($string) {

$char_array = preg_split('/(?<!^)(?!$)/u', $string );

$len = count($char_array);

for($x=0;$x<$len;$x++) {

if(strlen($char_array[$x])>3) {

$char_array[$x] = "";

}

}

return implode($char_array, "");

}

svn的服务端搭建及使用

编    写:袁    亮
时    间:2015-01-27
说    明:svn的服务端搭建及使用

一、服务端搭建
1、svn 安装
yum install -y subversion
2、创建svn版本库
mkdir /opt/ci123/svnroot/
3、创建一个svn项目
svnadmin create /opt/ci123/svnroot/test
4、修改svn配置信息
4.1 添加账号:
vim /opt/ci123/svnroot/test/conf/passwd
root=249
4.2 账号权限
vim /opt/ci123/svnroot/test/conf/authz
[/]
root=rw
4.3 svn服务配置
vim /opt/ci123/svnroot/test/conf/svnserve.conf
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
5、启动svn服务
svnserve -d -r /opt/ci123/svnroot/ --log-file /tmp/svn_run.log
注意启动的目录是/opt/ci123/svnroot/
日志写入到/tmp/svn_run.log,方便后期定位问题
6、客户端使用
svn co svn://192.168.0.249:3690/test
#端口号3690可以不写,默认就是这个
7、再建另外一个svn
7.1 使用:svn://192.168.0.249:3690/ciphoto
7.2 创建服务端:
svnadmin create /opt/ci123/svnroot/ciphoto
同上,修改配置信息即可
8、删除一个svn目录
rm -rf /opt/ci123/svnroot/test
慎用,不可恢复

二、shell统一管理
1、配置文件统一
cp -r /opt/ci123/svnroot/ciphoto/conf /opt/ci123/svnroot/conf2
将其中的svnserve.conf引用的passwd和auth文件引用备份出来的配置文件
2、编写创建svn的shell脚本create.sh
#!/bin/sh
#袁亮,2015-01-27
#svn创建脚本

if [ ! "$1" ] ;then #项目名不能为空
echo '请输入你需要创建的svn名'
exit
fi

if [ -d "/opt/ci123/svnroot/$1" ];then
echo '该svn已经存在,请重新输入名称'
exit
fi

echo $1"的svn正在创建中"
res=`svnadmin create /opt/ci123/svnroot/$1`
cp /opt/ci123/svnroot/conf/svnserve.conf /opt/ci123/svnroot/$1/conf/svnserve.conf
echo $1"的svn创建完成,可以通过svn://192.168.0.249/$1 checkout下来访问"
3、执行方法
sh /opt/ci123/svnroot/create.sh test

三、后台管理形式
1、有开源的项目可以直接管理(不好用)
2、也可以自己定制开发,开发也简单

四、配置文件
1、auth文件中组设定
[groups]
geek=yuanliang,root
2、auth文件中给组权限
[/]
@geek=rw
3、所有账号都有读权限
[/]
*=r

附:
1、参考文档:
http://www.cnblogs.com/Anders888/p/4167389.html
http://www.2cto.com/os/201403/282669.html

统计代码的使用

编    写:袁    亮
时    间:2015-07-06
说    明:统计代码的使用

一、作用
1、作为一个第三方插件,帮我们统计项目的访问人数uv、ip、pv,哪些页面访问的多,都是从哪过来访问的等等一系列数据
2、从各个维度,了解我们项目现在的具体情况,并作为改进的参考

二、常用统计代码
1、51yes:很多老项目里使用了,虽然做的很一般
2、cnzz:很多项目使用了,但是因为使用的太多,树大招风,有时候会被劫持放广告
3、量子统计:小清新,有些功能比较好用
4、百度统计:不允许在项目里使用

三、怎么使用
1、找项目负责人要相应的统计代码
ps:自己必须知道这统计代码怎么来的,上各网站,注册账号,申请统计代码,自己实际操作下
2、在项目的公告底部文件,比如footer.php之类的,加上以下代码
<div style="display:none">第一步那边得到的统计代码</div>
2.1 必须使用display隐藏
2.2 统计代码只能放在页面底部,不允许在中间或者头部添加
2.3 不允许添加非项目负责人发起的统计代码添加

四、怎么查看
1、上相应的统计网站,找负责人要账号密码上去查看
2、重点关注UV,IP,PV,以及跟往前数据的对比,单看某一天的数据没什么意义

后端开发中简单json使用

编    写:袁    亮
时    间:2015-06-29
说    明:后端开发中简单json使用

一、json是什么
1、json是一种特定格式的字符串
2、与开发语言无关,各种语言对其支持的也非常好
3、很方便作为数据交换

二、json格式说明
1、只支持unicode编码
2、汉字或特殊符号等,都将转为unicode编码存储

三、php中的使用
1、将数组转为json字符串
$json_str = json_encode($arr);
只能接受utf-8编码的
2、将json字符串转为数组
$arr = json_decode($str,1);
第二个参数不加,有些版本的php会转为对象object,为统一使用,一律加第二个参数,转成数组,方便使用

四、json数据查看
1、google或者百度json格式化,一堆的工具
2、也可以装浏览器的插件方便查看,比如百度的FE助手之类的

putty常用设置

 

编     写:袁     亮

时     间:2015-07-03

说     明:putty的常用设置

一、putty是什么?

1、远程登录linux服务器,进行相应的服务器操作

2、我们的服务器,99%都是linux服务器

3、文件上传下载,也可以使用winscp,类似putty

二、简单使用

1、下载putty客户端

也可以直接用:\\192.168.0.18\运维网络硬盘\y袁亮\putty.exe

2、设置要登陆的服务ip,端口,账号名,账号均是ci123dev,端口22或者29622

1

3、设置字体,颜色

2

4、设置字符编码,均为UTF-8

3

5、设置自动与服务器通信的间隔时间(部分服务一定时间内无通信会自动端口putty)

4

6、设置登陆服务器的秘钥文件,请找直属领导要相应的秘钥文件

5

7、保存设置,并起个别名,方便后面直接使用

6

8、登陆putty或者修改配置,选择一个session名,双机或者open打开连接,load加载配置修改

7

 

如何加hosts

1、打开C:\Windows\System32\drivers\etc\目录,以记事本等找打hosts文件

ps:可以对这个文件建一个快捷方式到桌面,防止每次要找,win7需要以管理员权限修改

2、在空白的地方,增加一行hosts,例如:

221.231.140.241 abc.ci123.com

3、保存文件,并重启浏览器访问(有些浏览器会缓存结果,需要重启才能生效,有些强刷crtl+f5即可)

4、其他知识:

127.0.0.1代表你正在操作的这台机器

192.168开头的,代表的是内网的ip