PHP中sessionid的那点儿事儿

PHP中默认的sessionid为PHPSESSID;

当然,也可以通过

string session_name ([ string $name ] )

来修改, 官方说明:

name

The session name references the name of the session, which is used in cookies and URLs (e.g. PHPSESSID). It should contain only alphanumeric characters; it should be short and descriptive (i.e. for users with enabled cookie warnings). If name is specified, the name of the current session is changed to its value.

 

疑问: 只能包含字母和数字?

参考源码:

  1. 不能全数字
  2. 当然,sessionid毕竟是个cookie name,也会遵循cookie name的检查(参看: http://phpor.net/blog/post/1122 )
  3. 没有发现哪里体现“只能包含字母和数字”,实测也发现,其实 dot、_ 都是可以的

 

 

 

php-redis benchmark

脚本:

 

阿里云的1G标准的redis,当同时40个这样的PHP进程压测的话,会有8个进程最终出现select时 1s 超时异常; 但是人家给的指标是支持 300并发的

关于syslog协议

在使用rsyslog的时候,一般来讲,如果消息中含有换行符的话,这条消息会以换行符为分隔,视为多条消息;即: rsyslog协议是基于行处理的,而且,默认单个消息大小为2k(rsyslogd v5),rsyslogd v8默认单个消息大小为8k。

问题: 一般来讲,程序出错时的堆栈信息都是多行的,这种情况该如何处理呢?

办法1: 先将堆栈信息中的换行替换成其它字符

办法2: 其实rsyslog是可以支持换行的,只是不是想换就换的,在structure data中可以小心地换行

 

关于syslog协议有两个rfc:

  1. The BSD syslog Protocol rfc3164
  2. The Syslog Protocol rfc5424

其中:

rfc3164 定义的syslog协议是比较原始的用法,不支持消息的换行

rfc5424 是所谓的version为1的syslog协议,支持 structure data;就是这个structure data中是可以包含换行的; 当然,要严格遵照定义的格式的哦

两种协议格式解析的golang实现: https://github.com/jeromer/syslogparser

 

rsyslog (rsyslog-8.17.0)源码学习:

  1. runtime/stream.c 中是这么解析的

翻译下:

mode=0 单行模式,遇到回车算做消息结束

mode=1 空行分隔模式,遇到空行算作消息结束(就是相邻消息之间要已空行分隔)

mode=2 非空开头模式, 只要下一行空白(应该也包含tab吧)开头就算作上个消息的一部分,不视为新消息

不幸的是,目前发现只有imfile模块才支持这三种模式之间的选择,更不幸的时,imfile模块使用inotify配置时,mode=2有bug(我测试时不是有bug,是根本不能用)

rsyslog disk queue配置

我们是这么使用rsyslog的:

app —-通过/dev/log写入—-> 本地rsyslogd ——–tcp转发(DA Queue)——> 集中日志收集rsyslogd

其中: DA Queue就是如果远程rsyslogd出现问题了,就暂存到本地(先内存后磁盘)

小朋友说配置了DA Queue了,但是一次远程rsyslogd的几个小时的中断过后,日志没能暂存到app端;配置如下:

其实,我们只是使用了local6,我们也只想转发local6的日志到远程rsyslogd;但是,小朋友就是画蛇添足多写了 user.* 这行, 问题就出现在这行;说明: ActionQueue的配置是针对紧挨着的那个转发的配置的,一个ActionQueue的配置不能同时应用到多个转发的配置的。

 

参考资料:http://bigsec.net/one/tool/rsyslog.html

http://my.oschina.net/0757/blog/198329

git diff(merge) with beyond compare

在mac上,beyond compare默认没有安装命令行,需要通过如下方式安装命令行:

其中,命令行有两个命令,如下:

/usr/local/bin/bcomp:
Launches comparison and waits for it to complete.

/usr/local/bin/bcompare:
Launches comparison and returns immediately.

 

配置diff工具和配置merge工具几乎没有太大差别,这里以diff为例

首先,看看git支持哪些diff工具:

其中:

  1. 后面的工具能用,但是当前不可用;大概意思是,下面这些工具都是图形化的,需要窗口环境,但是,当前是一个terminal-only的会话,他们会失败的。 (但是,我下面要使用的bc就是图形化的呀?)
  2. bc是啥? 就是 beyond compare; 为啥还分bc和bc3?(估计是参数定义不同吧,我们配置工具的时候也不需要指定参数,肯定是git已经帮我们配置好了)
  3. git没有内置这些工具,只是默认有这些工具的相关配置
  4. 我们可以直接通过命令行参数指定使用哪个工具,如下,指定vimdiff:
    git difftool -t vimdiff
  5. 我们可以通过 -x 选项指定自定义的命令,参数就是要比较的两个文件,这样我可以使用git没有内置支持的一些工具了

配置方法, git difftool –help

参考:https://gist.github.com/jfromaniello/9207698

openldap 备份与导入

ldap有几个slap* 命令,与ldap* 命令不同的是,前者直接操作库文件,不涉及密码问题。

导出:

导入:

注意: 导入时,slapd不能是启动状态,至少使用bdb存储时如此,因为slapd启动后会对数据文件加锁;毕竟slapadd也不是通过slapd写入文件的,所以slapd没必要启动

参考资料:

http://www.361way.com/openldap-bak-imp-move/2366.html

http://www.cnblogs.com/ccdc/p/3356518.html

 

nginx 多证书配置

曾经的曾经,单个IP上配置多个https证书是不可以的;随着ssl的一代代的升级,得益于TLS的SNI(Server Name Indication ),现在单个IP上也可以配置多个https证书了;但是,需要client和server都支持(不过现在的浏览器或其他client都能支持了),只要sslv3或tls都可以

查看nginx是否支持多证书:

参考:

http://blog.csdn.net/cccallen/article/details/6672451

https://www.ttlsa.com/web/sni-multi-domain-virtual-host-ssl-tls-authentication/