前些天突然发现俺的PPT是2007的用着用着就没法输入中文了,没管,现在又要用到,还是没法输入中文,最后,我就在网上找,在sina爱问上找到了,URL:http://ishare.iask.sina.com.cn/f/8883411.html?from=dl
要5积分,我就下载下供自己也可能方便其他人吧。
下载地址如下:
要5积分,我就下载下供自己也可能方便其他人吧。
下载地址如下:
下载文件
[个人原创]YAML的C++解析器 yaml-cpp的实际编译和使用备案
Php/Js/Shell/Go jackxiang 2011-8-10 10:56
C++下有这一个Yaml的解析包,PHP也有一个Yaml的解析包,这样两者就能进行对文件的解析是一个规则,达到统一的目的,双方就可以通讯,这样语言之间对配置的解析一样,上层通过Socket来通信统一,进而实现大系统的搭建和和谐,呵呵。
首先要有CMake环境,需要编译一个CMake出来,然后才是在下载下来的文件目录下运行这个Cmake:
tar -zxvf cmake-2.8.4.tar.gz
首先,需要下载安装Cmake;
wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
安装cmake;
其次,下载YAML的C++解析器 yaml-cpp ,URL为:http://www.oschina.net/p/yaml-cpp
编译:
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# cmake -DBUILD_SHARED_LIBS=ON
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Performing Test FLAG_WEXTRA
-- Performing Test FLAG_WEXTRA - Success
-- Configuring done
-- Generating done
-- Build files have been written to: /home/admin/c++/yaml_4_C/yaml-cpp
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# make
Scanning dependencies of target yaml-cpp
[ 3%] Building CXX object CMakeFiles/yaml-cpp.dir/src/emitter.cpp.o
[ 6%] Building CXX object CMakeFiles/yaml-cpp.dir/src/emitterstate.cpp.o
[ 9%] Building CXX object CMakeFiles/yaml-cpp.dir/src/simplekey.cpp.o
[ 12%] Building CXX object CMakeFiles/yaml-cpp.dir/src/parser.cpp.o
......
[ 96%] Building CXX object test/CMakeFiles/run-tests.dir/spectests.cpp.o
Linking CXX executable run-tests
[ 96%] Built target run-tests
Scanning dependencies of target parse
[100%] Building CXX object util/CMakeFiles/parse.dir/parse.cpp.o
Linking CXX executable parse
[100%] Built target parse
然后呢: make ,后生成:
/home/admin/c++/yaml_4_C/yaml-cpp/test3
libyaml-cpp.so.0.2.6
libyaml-cpp.so.0.2 -> libyaml-cpp.so.0.2.6
libyaml-cpp.so -> libyaml-cpp.so.0.2
查看H文件位置:
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# find . -name "yaml.h"
./include/yaml-cpp/yaml.h
最后,进行Yaml的代码解析测试:
1)建立目录:
mkdir test3
目录位置:root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3
2)写入C++测试代码
1.vi test.cpp
加入:
3).把yaml.h拷贝到test3的目录下来:
4)后进行编译编译:
g++ -o test test.cpp -I../include/ ../libyaml-cpp.so
5)运行测试
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3# ./test
./test: error while loading shared libraries: libyaml-cpp.so.0.2: cannot open shared object file: No such file or directory
6)解决问题:
/home/admin/c++/yaml_4_C/yaml-cpp/test3
libyaml-cpp.so.0.2.6
libyaml-cpp.so.0.2 -> libyaml-cpp.so.0.2.6
libyaml-cpp.so -> libyaml-cpp.so.0.2
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# cp libyaml-cpp.so /usr/lib/
root@116.255.139.240:/usr/lib# ln -s libyaml-cpp.so libyaml-cpp.so.0.2
7)再次执行,得到解决:
再执行就不报错了,原来是没有把这个so给放到/usr/lib下,再就是没有给重新软链接一个,Ok了。
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3# ./test
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3#
8)自由发挥,放到实际的开发中去。
Yaml实际解析测试:
component.yaml这个Yaml文件的内容:
编译:
测试Yaml解析是否成功:
解析成功!!!
最后,当然还有纯C语言的,来解析 YAML 1.1 数据,其编译估计差不多,下载URl:
http://www.oschina.net/p/libyaml
建议用eclipse来开发C++,还有PHP,因为eclipse 有PHP的插件,也有C++的插件,我是用的Zend for eclipse,现在eclipse还有一个Yaml的编辑插件,相关介绍情况如下:
安装YEdit
YEdit是一个在Eclipse上编辑YAML文件的插件。当我们我们使用Python进行App Engine的开发,会涉及编辑一些YAML文件,这个插件提供了较好的支持。
这个还是通过Eclipse的更新管理器来完成安装,在对话框中的在Work with中输入http://dadacoalition.org/yedit,然后勾选该插件,然后不断下一步,稍等片刻,安装成功。
eclipse 下的PHP插件参考:http://chenling1018.blog.163.com/blog/static/1480254201012234015728/
首先要有CMake环境,需要编译一个CMake出来,然后才是在下载下来的文件目录下运行这个Cmake:
tar -zxvf cmake-2.8.4.tar.gz
首先,需要下载安装Cmake;
wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
安装cmake;
其次,下载YAML的C++解析器 yaml-cpp ,URL为:http://www.oschina.net/p/yaml-cpp
编译:
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# cmake -DBUILD_SHARED_LIBS=ON
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Performing Test FLAG_WEXTRA
-- Performing Test FLAG_WEXTRA - Success
-- Configuring done
-- Generating done
-- Build files have been written to: /home/admin/c++/yaml_4_C/yaml-cpp
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# make
Scanning dependencies of target yaml-cpp
[ 3%] Building CXX object CMakeFiles/yaml-cpp.dir/src/emitter.cpp.o
[ 6%] Building CXX object CMakeFiles/yaml-cpp.dir/src/emitterstate.cpp.o
[ 9%] Building CXX object CMakeFiles/yaml-cpp.dir/src/simplekey.cpp.o
[ 12%] Building CXX object CMakeFiles/yaml-cpp.dir/src/parser.cpp.o
......
[ 96%] Building CXX object test/CMakeFiles/run-tests.dir/spectests.cpp.o
Linking CXX executable run-tests
[ 96%] Built target run-tests
Scanning dependencies of target parse
[100%] Building CXX object util/CMakeFiles/parse.dir/parse.cpp.o
Linking CXX executable parse
[100%] Built target parse
然后呢: make ,后生成:
/home/admin/c++/yaml_4_C/yaml-cpp/test3
libyaml-cpp.so.0.2.6
libyaml-cpp.so.0.2 -> libyaml-cpp.so.0.2.6
libyaml-cpp.so -> libyaml-cpp.so.0.2
查看H文件位置:
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# find . -name "yaml.h"
./include/yaml-cpp/yaml.h
最后,进行Yaml的代码解析测试:
1)建立目录:
mkdir test3
目录位置:root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3
2)写入C++测试代码
1.vi test.cpp
加入:
3).把yaml.h拷贝到test3的目录下来:
4)后进行编译编译:
g++ -o test test.cpp -I../include/ ../libyaml-cpp.so
5)运行测试
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3# ./test
./test: error while loading shared libraries: libyaml-cpp.so.0.2: cannot open shared object file: No such file or directory
6)解决问题:
/home/admin/c++/yaml_4_C/yaml-cpp/test3
libyaml-cpp.so.0.2.6
libyaml-cpp.so.0.2 -> libyaml-cpp.so.0.2.6
libyaml-cpp.so -> libyaml-cpp.so.0.2
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# cp libyaml-cpp.so /usr/lib/
root@116.255.139.240:/usr/lib# ln -s libyaml-cpp.so libyaml-cpp.so.0.2
7)再次执行,得到解决:
再执行就不报错了,原来是没有把这个so给放到/usr/lib下,再就是没有给重新软链接一个,Ok了。
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3# ./test
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3#
8)自由发挥,放到实际的开发中去。
Yaml实际解析测试:
component.yaml这个Yaml文件的内容:
编译:
测试Yaml解析是否成功:
解析成功!!!
最后,当然还有纯C语言的,来解析 YAML 1.1 数据,其编译估计差不多,下载URl:
http://www.oschina.net/p/libyaml
建议用eclipse来开发C++,还有PHP,因为eclipse 有PHP的插件,也有C++的插件,我是用的Zend for eclipse,现在eclipse还有一个Yaml的编辑插件,相关介绍情况如下:
安装YEdit
YEdit是一个在Eclipse上编辑YAML文件的插件。当我们我们使用Python进行App Engine的开发,会涉及编辑一些YAML文件,这个插件提供了较好的支持。
这个还是通过Eclipse的更新管理器来完成安装,在对话框中的在Work with中输入http://dadacoalition.org/yedit,然后勾选该插件,然后不断下一步,稍等片刻,安装成功。
eclipse 下的PHP插件参考:http://chenling1018.blog.163.com/blog/static/1480254201012234015728/
[个人原创]VC6.0两大插件Visual Assist X Add-in和VC6LineNumber Developer Studio Add-in的下载安装过程。 VAssistX 常用快捷键。
Unix/LinuxC技术 jackxiang 2011-8-7 11:59
缘起:最近想学下C++,Linux下的C++,但苦于没有找到好的编辑器,经同事介绍,有同事在用source Insight,我也用过,近来发现scott用VC2008,还会自动提示,跳转什么的,好生羡慕,苦于没有安装源文件,只好在自己的VC6.0上整上同一套来学习下C++开发喽,听其他人都说:
VC6.0是一个不错的编辑器编译器,直至现在还有不少人有用它做开发的,XP系统是盗版的,再来个VC6.0是盗版的也无足轻重啦,但VC6.0不像source Insight 和CFree那样天生都具有提示功能,以及行号功能,但它也有它的优点,经过左右思考后结论如下:
1.代码字体很清晰,有条例,编译提示都有的,在这里没有问题,放到Linux下应该没太大问题,有问题再修改咯,主要是提高编码速度和质量才是,在哪个系统上跑不关心呗,不过Windows Server要钱,我提示下,Linux下运行Web CGI什么的可是免费的哇,微软的Server不是个人能买得起,听说是按连接数算,如果你还想买个Oracle那TMD可是按CPU数来算滴,这下TMD完了两家都帮做广告了。
2.能一键F5就能编译提示错误。【这个好像source Insight无,但中文字体显示让人觉得不舒服,但它自己带提示,而CFree有行号,也有编译mingw,但不大气,国产也需要注册,不注册也是盗版不是,没面子哇(你想说我很抠是吧,才100块钱注册费用都不给),我有个观点就是盗版全用一个公司的盗版得了,免得多家来找你就不好了,常言道:虱子多了不咬, 债多了不愁,就用一家,省得好几家找你,多事了不是?,何况你一个人用,微软尽管现在比起以前卖XP来说收入少了一点点,让人感觉是经营多少有点惨淡,最进我发现不是还有很多专利赚钱的嘛,听说手机上的专利钱一个手机都抽5美元不是,喔,原来瘦死的骆驼比马大,你这点小钱,So Little,再说当年八国联军火烧。。。扯远了,扯远了,不讲道理哈,打住。
3.就是现在VC6.0后有什么Visual2008等也出来了,微软估计都懒得理你,找你打官司真是无聊,爱死死一边用去吧:)
常用快捷键:
Alt + M:列出当前文件所有的函数
Alt + G:函数定义和声明的跳转
shift+alt+f:查找选定的内容,比VS2010自带的爽,不信你选定一个函数试试
Ctrl + J - 列出成员,仅包括代码提示
F3: 查找下一个
Shift+F3: 查找上一个
下载:
首先,来下载那个提示工具:
一个是在北邮的学校网上找了个最新破解版本的,
提示语法和函数的工具下载地,分Part1,Part2,分别URL如下,这个版本是1649,下面爱文的版本是1837:
http://bbs.byr.edu.cn/att/NetResources/44974/443
http://bbs.byr.edu.cn/att/NetResources/44973/488
当然也可以到Sina爱问下载,这个补丁Visual AssistX 10.6.1837安装文件和破解补丁打包下载 这个版本的VAX安装包直接支持所有的VS,包括VC6 VS2003 2005 2008 2010。
使用方法,URL是:http://ishare.iask.sina.com.cn/f/14588331.html
再次,是下载那个行号工具,后来的行号提示工具是在Sina爱问上找到的,老东家爱问上确实有很多好东东,近来百度文库上也有好多好东东哇,这尽管是涉及到版权,确定有很多知识和学习的文档,不顶不赞,默默享用,Sina爱问行号显示的插件下载URL如下:
http://ishare.iask.sina.com.cn/f/11944905.html?retcode=0
安装:
第一个提示代码和函数语法的插件直接安好就是,好像有一个破解VA_X.dll的给覆盖到提示代码的安装目录下就行。
第二个行号安装如下:
1)拷贝:拷贝文件VC6LineNumberAddin.dll到
D:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns
2)注册:双击VC6LineNumberAddin.reg进行注册。
3)启用
打开vc6,菜单栏:Tools -> customize -> Add-ins and Macro Files
选中VC6LineNumber Developer Studio Add-in
后记:
在第3)中看到了那个提示插件,我估计是就是安装时它就帮你勾选了这个Visual Assist X Add-in啦。
最后,
有了这两个插件,后面开发效率上可能会有较大提高哇,我也是初学,还请大家帮我,有什么好学习C++的方法的给我留言,呵呵。
Add: 2014-01-13 visual studio 2008
回忆未来-向东-Jàck 下午 05:31:26
两个安上了,提示是怎么跳来着,当年我是用的vc6.0
scott 下午 05:32:17
安装后,有没有这个工具条
回忆未来-向东-Jàck 下午 05:32:29
有了,哈哈。
跳不动,是要做索引?
scott 下午 05:33:10
关了,重新打开一次,光标放到函数哪里,点击右上角的“Go”
回忆未来-向东-Jàck 下午 05:35:02
喔,好。
回忆未来-向东-Jàck 下午 05:36:30
O了,嘿嘿。
—————http://blog.renren.com/share/232211851/7847121738————
函数跳转
Alt + G:函数定义和声明的跳转
F12: 转到所调用函数或变量的定义
Alt + M:列出当前文件所有的函数
查找
Ctrl+F: 查找
Ctrl+Shift+F: 在文件中查找
F3: 查找下一个
Shift+F3: 查找上一个
替换
Ctrl+H: 替换
Ctrl+Shift+H: 在文件中替换
Alt+F12: 查找符号(列出所有查找结果)
----------------------------------------------------------------
代码编写
----------------------------------------------------------------
Shift + Alt + Ente - 全屏显示
tt - 快速插入 _T()
Alt + Shift + Q:鼠标定位到函数名上,若是在h文件中,按此快捷键会弹出右键菜单,里面有个选项--创建定义;若是在cpp文件中,则按此快捷键会弹出右键菜单,里面 有一个选项--创建声明。 这在定义好接口之后,再来写实现时,配合Alt+O是非常快捷的。
Ctrl + R + E - 封装字段(VS 2008已经基本不需要该快捷键了,因为C# 3.0的自动属性 – Auto-Implemented Properties)
Ctrl + J - 列出成员,仅包括代码提示
Ctrl + Shift + Space - 参数信息
F7 - 跳转到窗体后置代码,WinForm中、WebForm中都可以
----------------------------------------------------------------
代码操作
----------------------------------------------------------------
Ctrl + K + C - 注释
Ctrl + K + U - 取消注释
Ctrl + ] - 寻找匹配的括号
Ctrl + Shift + ] - 选择匹配的括号与其中的代码
Ctrl + F - 快速查找
Ctrl + H - 快速替换
Ctrl + Shift + U - 转换为大写
Ctrl + U - 转换为小写
Ctrl + K + D - 设置文档格式
Tab - 增加缩进
Shift + Tab - 减少缩进
Ctrl + M + M - 折叠代码,例如将光标放在#region、if、方法头的位置,将会折叠它们
----------------------------------------------------------------
调试运行
----------------------------------------------------------------
F5 - 启动调试
Shift + F5 - 停止调试
F9 - 设置断点
Ctrl + Shift + F9 - 删除所有断点
F10 - 逐过程调试
F11 - 逐语句调试
----------------------------------------------------------------
项目的操作
----------------------------------------------------------------
Alt + Enter - 打开选定项的属性对话框
Ctrl + Shift + N - 新建项目
Shift + Alt + N - 新建网站
Ctrl + N - 新建文件
Ctrl + Shift + O - 打开项目
Shift + Alt + O - 打开网站
Ctrl + O - 打开文件
VC6.0是一个不错的编辑器编译器,直至现在还有不少人有用它做开发的,XP系统是盗版的,再来个VC6.0是盗版的也无足轻重啦,但VC6.0不像source Insight 和CFree那样天生都具有提示功能,以及行号功能,但它也有它的优点,经过左右思考后结论如下:
1.代码字体很清晰,有条例,编译提示都有的,在这里没有问题,放到Linux下应该没太大问题,有问题再修改咯,主要是提高编码速度和质量才是,在哪个系统上跑不关心呗,不过Windows Server要钱,我提示下,Linux下运行Web CGI什么的可是免费的哇,微软的Server不是个人能买得起,听说是按连接数算,如果你还想买个Oracle那TMD可是按CPU数来算滴,这下TMD完了两家都帮做广告了。
2.能一键F5就能编译提示错误。【这个好像source Insight无,但中文字体显示让人觉得不舒服,但它自己带提示,而CFree有行号,也有编译mingw,但不大气,国产也需要注册,不注册也是盗版不是,没面子哇(你想说我很抠是吧,才100块钱注册费用都不给),我有个观点就是盗版全用一个公司的盗版得了,免得多家来找你就不好了,常言道:虱子多了不咬, 债多了不愁,就用一家,省得好几家找你,多事了不是?,何况你一个人用,微软尽管现在比起以前卖XP来说收入少了一点点,让人感觉是经营多少有点惨淡,最进我发现不是还有很多专利赚钱的嘛,听说手机上的专利钱一个手机都抽5美元不是,喔,原来瘦死的骆驼比马大,你这点小钱,So Little,再说当年八国联军火烧。。。扯远了,扯远了,不讲道理哈,打住。
3.就是现在VC6.0后有什么Visual2008等也出来了,微软估计都懒得理你,找你打官司真是无聊,爱死死一边用去吧:)
常用快捷键:
Alt + M:列出当前文件所有的函数
Alt + G:函数定义和声明的跳转
shift+alt+f:查找选定的内容,比VS2010自带的爽,不信你选定一个函数试试
Ctrl + J - 列出成员,仅包括代码提示
F3: 查找下一个
Shift+F3: 查找上一个
下载:
首先,来下载那个提示工具:
一个是在北邮的学校网上找了个最新破解版本的,
提示语法和函数的工具下载地,分Part1,Part2,分别URL如下,这个版本是1649,下面爱文的版本是1837:
http://bbs.byr.edu.cn/att/NetResources/44974/443
http://bbs.byr.edu.cn/att/NetResources/44973/488
当然也可以到Sina爱问下载,这个补丁Visual AssistX 10.6.1837安装文件和破解补丁打包下载 这个版本的VAX安装包直接支持所有的VS,包括VC6 VS2003 2005 2008 2010。
使用方法,URL是:http://ishare.iask.sina.com.cn/f/14588331.html
再次,是下载那个行号工具,后来的行号提示工具是在Sina爱问上找到的,老东家爱问上确实有很多好东东,近来百度文库上也有好多好东东哇,这尽管是涉及到版权,确定有很多知识和学习的文档,不顶不赞,默默享用,Sina爱问行号显示的插件下载URL如下:
http://ishare.iask.sina.com.cn/f/11944905.html?retcode=0
安装:
第一个提示代码和函数语法的插件直接安好就是,好像有一个破解VA_X.dll的给覆盖到提示代码的安装目录下就行。
第二个行号安装如下:
1)拷贝:拷贝文件VC6LineNumberAddin.dll到
D:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns
2)注册:双击VC6LineNumberAddin.reg进行注册。
3)启用
打开vc6,菜单栏:Tools -> customize -> Add-ins and Macro Files
选中VC6LineNumber Developer Studio Add-in
后记:
在第3)中看到了那个提示插件,我估计是就是安装时它就帮你勾选了这个Visual Assist X Add-in啦。
最后,
有了这两个插件,后面开发效率上可能会有较大提高哇,我也是初学,还请大家帮我,有什么好学习C++的方法的给我留言,呵呵。
Add: 2014-01-13 visual studio 2008
回忆未来-向东-Jàck 下午 05:31:26
两个安上了,提示是怎么跳来着,当年我是用的vc6.0
scott 下午 05:32:17
安装后,有没有这个工具条
回忆未来-向东-Jàck 下午 05:32:29
有了,哈哈。
跳不动,是要做索引?
scott 下午 05:33:10
关了,重新打开一次,光标放到函数哪里,点击右上角的“Go”
回忆未来-向东-Jàck 下午 05:35:02
喔,好。
回忆未来-向东-Jàck 下午 05:36:30
O了,嘿嘿。
—————http://blog.renren.com/share/232211851/7847121738————
函数跳转
Alt + G:函数定义和声明的跳转
F12: 转到所调用函数或变量的定义
Alt + M:列出当前文件所有的函数
查找
Ctrl+F: 查找
Ctrl+Shift+F: 在文件中查找
F3: 查找下一个
Shift+F3: 查找上一个
替换
Ctrl+H: 替换
Ctrl+Shift+H: 在文件中替换
Alt+F12: 查找符号(列出所有查找结果)
----------------------------------------------------------------
代码编写
----------------------------------------------------------------
Shift + Alt + Ente - 全屏显示
tt - 快速插入 _T()
Alt + Shift + Q:鼠标定位到函数名上,若是在h文件中,按此快捷键会弹出右键菜单,里面有个选项--创建定义;若是在cpp文件中,则按此快捷键会弹出右键菜单,里面 有一个选项--创建声明。 这在定义好接口之后,再来写实现时,配合Alt+O是非常快捷的。
Ctrl + R + E - 封装字段(VS 2008已经基本不需要该快捷键了,因为C# 3.0的自动属性 – Auto-Implemented Properties)
Ctrl + J - 列出成员,仅包括代码提示
Ctrl + Shift + Space - 参数信息
F7 - 跳转到窗体后置代码,WinForm中、WebForm中都可以
----------------------------------------------------------------
代码操作
----------------------------------------------------------------
Ctrl + K + C - 注释
Ctrl + K + U - 取消注释
Ctrl + ] - 寻找匹配的括号
Ctrl + Shift + ] - 选择匹配的括号与其中的代码
Ctrl + F - 快速查找
Ctrl + H - 快速替换
Ctrl + Shift + U - 转换为大写
Ctrl + U - 转换为小写
Ctrl + K + D - 设置文档格式
Tab - 增加缩进
Shift + Tab - 减少缩进
Ctrl + M + M - 折叠代码,例如将光标放在#region、if、方法头的位置,将会折叠它们
----------------------------------------------------------------
调试运行
----------------------------------------------------------------
F5 - 启动调试
Shift + F5 - 停止调试
F9 - 设置断点
Ctrl + Shift + F9 - 删除所有断点
F10 - 逐过程调试
F11 - 逐语句调试
----------------------------------------------------------------
项目的操作
----------------------------------------------------------------
Alt + Enter - 打开选定项的属性对话框
Ctrl + Shift + N - 新建项目
Shift + Alt + N - 新建网站
Ctrl + N - 新建文件
Ctrl + Shift + O - 打开项目
Shift + Alt + O - 打开网站
Ctrl + O - 打开文件
g++ lianbiao.cpp
阅读全文
阅读全文
摘要:困扰了我N久的问题,哈,作下记录。
快捷键调出下载管理器方法如下:
ctrl+j
----
其他答案没有试过哈:鼠标手势,或者把下载按钮添加到导航栏,或者personal menu添加进去,或者。。。,你要知道关闭了下载管理器还是会继续下载,除非你手动停止了下载。
快捷键调出下载管理器方法如下:
ctrl+j
----
其他答案没有试过哈:鼠标手势,或者把下载按钮添加到导航栏,或者personal menu添加进去,或者。。。,你要知道关闭了下载管理器还是会继续下载,除非你手动停止了下载。
通过其他程序或脚本在非交互式模式下调用top命令,经常会出现:
top: failed tty get 错误
解决办法:加个-b 选项皆可
-b : Batch mode operation
Starts top in <A1><AF>Batch mode<A1><AF>, which could be useful for sending output from top to other programs or to a file. In this mode, top will not accept input and runs until the iterations limit you<A1><AF>ve set with the <A1><AF>-n<A1><AF> command-line option or until killed.
例如执行:
top -bn 1
监控某个进程的状态:
top -bn 1 -p 14370 | grep cmdname>>stats.log
来源:http://phpor.net/blog/post/819/
用top命令看一下有下边四个进程吗?有的话ok了!(top -b -d 5)
fmsmaster fmsedge fmscore fmsadmin
别忘记打开linux的防火墙端口!!!!
top: failed tty get 错误
解决办法:加个-b 选项皆可
-b : Batch mode operation
Starts top in <A1><AF>Batch mode<A1><AF>, which could be useful for sending output from top to other programs or to a file. In this mode, top will not accept input and runs until the iterations limit you<A1><AF>ve set with the <A1><AF>-n<A1><AF> command-line option or until killed.
例如执行:
top -bn 1
监控某个进程的状态:
top -bn 1 -p 14370 | grep cmdname>>stats.log
来源:http://phpor.net/blog/post/819/
用top命令看一下有下边四个进程吗?有的话ok了!(top -b -d 5)
fmsmaster fmsedge fmscore fmsadmin
别忘记打开linux的防火墙端口!!!!
把下面代码贴到.vimrc文件中就行了,然后,重新打开vim,写一个函数试试,我感觉还不错的...
来源:http://phpor.net/blog/post/881/
来源:http://phpor.net/blog/post/881/
在日常生活中往往有一些命令很长,如要到apache的htdocs下,要到Mysql和Apache的下bin目录下,要删除某个文件而事实上是把这个rm -Rf 变为了移动到某个大硬盘中去了,就会避免误删除后出现找不回文件了(当然有些软件可以找回,另当别论),别名可用来定义新的命令。一条别名当多条,这些别名通常放在初始化文件~/.bashrc(bash)或者/.tcshrc(tcsh)中,这样在交互式子shell中就可以使用这些别名。
在bash中,内置命令alias的语法如下:
在tcsh中语法如下:
jackxiang@178.258.918.106:/# vi ~/.bashrc
阅读全文
在bash中,内置命令alias的语法如下:
在tcsh中语法如下:
jackxiang@178.258.918.106:/# vi ~/.bashrc
阅读全文
背景:这块一般是这样的,linux是什么用户登录就是什么用户的home下,如root用户就是/root,如果xiangdong就是/home/xiangdong。这块可以在用c语言进行切换时伪装成root,文章如下:https://jackxiang.com/post/7556/ 。
用Svn时会有一种需求是需要换个帐号测试一下什么的,但往往有缓存,于是需要清理下才行:
一搬来说在客户端清理一下即可,经过实践是Ok的,如下:
1、在项目上右键,选择TortoiseSVN-->settings,
2、在弹出的TortoiseSVN Settings页面中选择“Saved Data”选项,
3、然后点击“Authentication data”对应的“Clear”按钮,清除一下之前的认证信息就可以了。
下次,就会要求输入用户名和密码,OK!
=============下面这个没有试过==================
svn客户端取消认证缓存设置,需要两个步骤:
(1)修改配置文件,使下次登录时不记录密码
windows环境,在开始菜单->运行输入:%appdata%/subversion,找到config文件【反正自己找到即可】;
unix/linux环境,编辑~/.subversion/config文件。这个试过可以的。
分别对以下两行取消注释、然后保存退出;
# store-passwords = no
# store-auth-creds = no
(2)删除认证缓存设置
windows环境,删除:%appdata%/subversion/auth目录
unix/linux环境执行:rm -rf ~/.subversion/auth
windows 和 linux下 清除svn保存的账号密码信息:
==================================
windows下
方法1:对于TortoiseSVN软件,右键出TortoiseSVN菜单Settings->Saved Data->Authentication data,Clear
或者
方法2:C:\Documents and Settings\Administrator\Application Data\Subversion\auth
删除auth下面的所有文件夹
如果以上2个方法都不起作用,那么只能卸载TortoiseSVN,再重新安装一次,之后上面的2个方法就能起作用了.
==================================
linux下
删除~/.subversion/auth即可
luther@gliethttp:~$ rm -rf ~/.subversion/auth
#:~/.subversion/auth # ls
svn.simple svn.ssl.client-passphrase svn.ssl.server svn.username
这个文件:
./svn.simple/ff163eadbbc43c8f640a9163591xxec0:jackxiang
用Svn时会有一种需求是需要换个帐号测试一下什么的,但往往有缓存,于是需要清理下才行:
一搬来说在客户端清理一下即可,经过实践是Ok的,如下:
1、在项目上右键,选择TortoiseSVN-->settings,
2、在弹出的TortoiseSVN Settings页面中选择“Saved Data”选项,
3、然后点击“Authentication data”对应的“Clear”按钮,清除一下之前的认证信息就可以了。
下次,就会要求输入用户名和密码,OK!
=============下面这个没有试过==================
svn客户端取消认证缓存设置,需要两个步骤:
(1)修改配置文件,使下次登录时不记录密码
windows环境,在开始菜单->运行输入:%appdata%/subversion,找到config文件【反正自己找到即可】;
unix/linux环境,编辑~/.subversion/config文件。这个试过可以的。
分别对以下两行取消注释、然后保存退出;
# store-passwords = no
# store-auth-creds = no
(2)删除认证缓存设置
windows环境,删除:%appdata%/subversion/auth目录
unix/linux环境执行:rm -rf ~/.subversion/auth
windows 和 linux下 清除svn保存的账号密码信息:
==================================
windows下
方法1:对于TortoiseSVN软件,右键出TortoiseSVN菜单Settings->Saved Data->Authentication data,Clear
或者
方法2:C:\Documents and Settings\Administrator\Application Data\Subversion\auth
删除auth下面的所有文件夹
如果以上2个方法都不起作用,那么只能卸载TortoiseSVN,再重新安装一次,之后上面的2个方法就能起作用了.
==================================
linux下
删除~/.subversion/auth即可
luther@gliethttp:~$ rm -rf ~/.subversion/auth
#:~/.subversion/auth # ls
svn.simple svn.ssl.client-passphrase svn.ssl.server svn.username
这个文件:
./svn.simple/ff163eadbbc43c8f640a9163591xxec0:jackxiang
[个人原创]在某个文件的每行后追加一段相同的文本,也就是行尾追加的PHP简单实现
Php/Js/Shell/Go jackxiang 2011-8-4 14:57
在PHP的高级编程群里有位兄弟问这个问题,于是我就写一个如下:
在/tmp/a.txt后面每行追加jackxiang.com,PHP代码如下:
注意:
1. file_put_contents的第一次写和第N次写的参数不同。
2.注意file读取出来的数组中有换行符号的,需要通过str_replace去掉。
3.Linux下Win下不同的回车
最后,直接全部读取出来进行替换也可以的。
其实,这个去换行符号也是在网上找的,有两种:
第一种:
$content=str_replace("\n","",$content);
echo $content;
第二种:
$content=preg_replace("/\s/","",$content);
echo $content;
呵呵。
在/tmp/a.txt后面每行追加jackxiang.com,PHP代码如下:
注意:
1. file_put_contents的第一次写和第N次写的参数不同。
2.注意file读取出来的数组中有换行符号的,需要通过str_replace去掉。
3.Linux下Win下不同的回车
最后,直接全部读取出来进行替换也可以的。
其实,这个去换行符号也是在网上找的,有两种:
第一种:
$content=str_replace("\n","",$content);
echo $content;
第二种:
$content=preg_replace("/\s/","",$content);
echo $content;
呵呵。
[个人原创]C++学习,在函数中,数组参数退化为指针
Php/Js/Shell/Go jackxiang 2011-8-4 10:16
代码片段:
输出:
From main function:
10
jackxiang
From fun function:
4
jackxiang
此例说明:在函数中,数组参数退化为指针,所以函数fun中的sizeof(a)的内容永远输出为4。
输出:
From main function:
10
jackxiang
From fun function:
4
jackxiang
此例说明:在函数中,数组参数退化为指针,所以函数fun中的sizeof(a)的内容永远输出为4。
平时我们爱使用Curl来实现Http协议的接口调试,包括Post,Get,Etc。
然而,近来发现Suse enterprise sp2的64位机上没有这个Curl的PHP扩展,
于是,想了想,我使用了PHP的方法来实现了对其它接口的访问,包括Cookie头的发送,简单Demo如下:
vi file_get_contents.php
接收简单Demo代码,test3.php:
测试结果:
root@172.25.38.**:/home/jackxiang/php# php file_get_contents.php
得证。EOF
然而,近来发现Suse enterprise sp2的64位机上没有这个Curl的PHP扩展,
于是,想了想,我使用了PHP的方法来实现了对其它接口的访问,包括Cookie头的发送,简单Demo如下:
vi file_get_contents.php
接收简单Demo代码,test3.php:
测试结果:
root@172.25.38.**:/home/jackxiang/php# php file_get_contents.php
得证。EOF
Q:本人长时间咳黄痰,鼻子感觉有些火烧感,请问吃些什么药好呢,如果从中医的角度来看是风寒还是风热引起的呢,怎么在日常中注意保养身体呢,谢谢
A:作为一名 AI 语言模型,我不能对你的身体状况做出诊断或提供具体的医疗建议。如果你一直在咳嗽并且出现了黄痰和鼻子火烧感,请尽快咨询你的医生或就近的医疗机构,以获得专业的建议和治疗。
如果你想从中医角度来看待这个问题,通常情况下,咳嗽黄痰和鼻子火烧感可能与风热或者风寒引起的。风热和风寒都是中医理论中的病邪,会影响身体的正常功能。风热主要表现为咳嗽、喉咙疼痛、鼻塞等症状,而风寒则表现为咳嗽、喉咙痛、流清鼻涕等症状。
如果你想在日常生活中保持身体健康,你可以尝试以下方法:
合理饮食,注意营养均衡,多食用蔬菜、水果等新鲜食品,少食用油腻、辛辣等刺激性食品。
保持良好的生活习惯,如定时作息、适量运动、不熬夜等。
注意保持身体的温暖,避免受凉和受风,尤其是在春秋季节和寒冷的冬天。
避免吸烟和二手烟的影响,保持室内空气的清新。
最后,请记住,如果你感到身体不适,最好及时咨询医生的意见,以便获得更好的治疗和建议。
枇杷止咳糖浆是治疗风寒还是风热感冒的咳嗽?
枇杷止咳糖浆是一种传统中药制剂,其主要成分是枇杷叶、桔梗、杏仁等。它常被用于治疗咳嗽和喉咙疼痛等症状。
根据中医理论,咳嗽分为风寒咳和风热咳两种类型。风寒咳嗽通常伴随着寒冷的症状,如头痛、身体发冷、流鼻涕等,而风热咳嗽则通常伴随着发热、喉咙疼痛、口干等症状。
枇杷止咳糖浆主要用于治疗风热感冒的咳嗽,其功效为清热解毒、化痰止咳。因此,如果你患有风热感冒的咳嗽,可以考虑使用枇杷止咳糖浆进行治疗。但如果你患有风寒咳嗽,枇杷止咳糖浆可能并不适用,需要根据具体症状选用其他的中药制剂进行治疗。建议在服用中药前咨询医生或中医师的建议,以确保选择正确的药物。
复方甘草口服溶液是治疗风寒还是风热感冒的咳嗽?
复方甘草口服溶液可用于治疗风寒和风热引起的咳嗽,但其治疗机理和用法略有不同。
对于风寒感冒引起的咳嗽,复方甘草口服溶液可以用来缓解咳嗽、化痰、止咳等症状。这是因为甘草具有温中止咳、润肺化痰的作用,可舒缓喉咙不适感、促进咳痰,还可以增强机体免疫力,帮助身体抵御感染。
对于风热感冒引起的咳嗽,复方甘草口服溶液也可以用来缓解咳嗽,但其作用机理略有不同。此时,甘草主要发挥的作用是清热解毒、润肺止咳,帮助清除体内热毒,减轻喉咙肿痛和痰液黏稠等症状。
总之,复方甘草口服溶液可以用于治疗风寒和风热引起的咳嗽,但其用法和治疗机理可能略有差异,建议在医生的指导下使用。
板蓝根是治疗风寒还是风热?
板蓝根在中医中被归类为清热解毒的草药,它的功效是清热解毒、凉血止血,可以用于治疗热毒引起的发热、咽喉肿痛、口腔溃疡等症状。因此,板蓝根通常被用于治疗风热引起的症状,而不是治疗风寒。
干咳早期:甘草口服液
咳嗽有痰:一般还是感冒引起的,急支糖浆。(生姜[火姜]+紫苏+分葱[细葱]+红糖)
时间久:急支糖浆饭前+板蓝根饭后。晚上安乃近发汗。
背心:背心凉热敷,不凉就是风热,另外一种治疗方法。
阅读全文
A:作为一名 AI 语言模型,我不能对你的身体状况做出诊断或提供具体的医疗建议。如果你一直在咳嗽并且出现了黄痰和鼻子火烧感,请尽快咨询你的医生或就近的医疗机构,以获得专业的建议和治疗。
如果你想从中医角度来看待这个问题,通常情况下,咳嗽黄痰和鼻子火烧感可能与风热或者风寒引起的。风热和风寒都是中医理论中的病邪,会影响身体的正常功能。风热主要表现为咳嗽、喉咙疼痛、鼻塞等症状,而风寒则表现为咳嗽、喉咙痛、流清鼻涕等症状。
如果你想在日常生活中保持身体健康,你可以尝试以下方法:
合理饮食,注意营养均衡,多食用蔬菜、水果等新鲜食品,少食用油腻、辛辣等刺激性食品。
保持良好的生活习惯,如定时作息、适量运动、不熬夜等。
注意保持身体的温暖,避免受凉和受风,尤其是在春秋季节和寒冷的冬天。
避免吸烟和二手烟的影响,保持室内空气的清新。
最后,请记住,如果你感到身体不适,最好及时咨询医生的意见,以便获得更好的治疗和建议。
枇杷止咳糖浆是治疗风寒还是风热感冒的咳嗽?
枇杷止咳糖浆是一种传统中药制剂,其主要成分是枇杷叶、桔梗、杏仁等。它常被用于治疗咳嗽和喉咙疼痛等症状。
根据中医理论,咳嗽分为风寒咳和风热咳两种类型。风寒咳嗽通常伴随着寒冷的症状,如头痛、身体发冷、流鼻涕等,而风热咳嗽则通常伴随着发热、喉咙疼痛、口干等症状。
枇杷止咳糖浆主要用于治疗风热感冒的咳嗽,其功效为清热解毒、化痰止咳。因此,如果你患有风热感冒的咳嗽,可以考虑使用枇杷止咳糖浆进行治疗。但如果你患有风寒咳嗽,枇杷止咳糖浆可能并不适用,需要根据具体症状选用其他的中药制剂进行治疗。建议在服用中药前咨询医生或中医师的建议,以确保选择正确的药物。
复方甘草口服溶液是治疗风寒还是风热感冒的咳嗽?
复方甘草口服溶液可用于治疗风寒和风热引起的咳嗽,但其治疗机理和用法略有不同。
对于风寒感冒引起的咳嗽,复方甘草口服溶液可以用来缓解咳嗽、化痰、止咳等症状。这是因为甘草具有温中止咳、润肺化痰的作用,可舒缓喉咙不适感、促进咳痰,还可以增强机体免疫力,帮助身体抵御感染。
对于风热感冒引起的咳嗽,复方甘草口服溶液也可以用来缓解咳嗽,但其作用机理略有不同。此时,甘草主要发挥的作用是清热解毒、润肺止咳,帮助清除体内热毒,减轻喉咙肿痛和痰液黏稠等症状。
总之,复方甘草口服溶液可以用于治疗风寒和风热引起的咳嗽,但其用法和治疗机理可能略有差异,建议在医生的指导下使用。
板蓝根是治疗风寒还是风热?
板蓝根在中医中被归类为清热解毒的草药,它的功效是清热解毒、凉血止血,可以用于治疗热毒引起的发热、咽喉肿痛、口腔溃疡等症状。因此,板蓝根通常被用于治疗风热引起的症状,而不是治疗风寒。
干咳早期:甘草口服液
咳嗽有痰:一般还是感冒引起的,急支糖浆。(生姜[火姜]+紫苏+分葱[细葱]+红糖)
时间久:急支糖浆饭前+板蓝根饭后。晚上安乃近发汗。
背心:背心凉热敷,不凉就是风热,另外一种治疗方法。
阅读全文
代码1:
Result:
1X1=1 1X2=2 1X3=3 1X4=4 1X5=5 1X6=6 1X7=7 1X8=8 1X9=9
2X2=4 2X3=6 2X4=8 2X5=10 2X6=12 2X7=14 2X8=16 2X9=18
3X3=9 3X4=12 3X5=15 3X6=18 3X7=21 3X8=24 3X9=27
4X4=16 4X5=20 4X6=24 4X7=28 4X8=32 4X9=36
5X5=25 5X6=30 5X7=35 5X8=40 5X9=45
6X6=36 6X7=42 6X8=48 6X9=54
7X7=49 7X8=56 7X9=63
8X8=64 8X9=72
9X9=81
代码2:
Result2:
1X1=1
1X2=2 2X2=4
1X3=3 2X3=6 3X3=9
1X4=4 2X4=8 3X4=12 4X4=16
1X5=5 2X5=10 3X5=15 4X5=20 5X5=25
1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36
1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49
1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64
1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81
Result:
1X1=1 1X2=2 1X3=3 1X4=4 1X5=5 1X6=6 1X7=7 1X8=8 1X9=9
2X2=4 2X3=6 2X4=8 2X5=10 2X6=12 2X7=14 2X8=16 2X9=18
3X3=9 3X4=12 3X5=15 3X6=18 3X7=21 3X8=24 3X9=27
4X4=16 4X5=20 4X6=24 4X7=28 4X8=32 4X9=36
5X5=25 5X6=30 5X7=35 5X8=40 5X9=45
6X6=36 6X7=42 6X8=48 6X9=54
7X7=49 7X8=56 7X9=63
8X8=64 8X9=72
9X9=81
代码2:
Result2:
1X1=1
1X2=2 2X2=4
1X3=3 2X3=6 3X3=9
1X4=4 2X4=8 3X4=12 4X4=16
1X5=5 2X5=10 3X5=15 4X5=20 5X5=25
1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36
1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49
1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64
1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81
在开发中,我们碰到的跨域主要还是纠结在IE,页面中的IFRAME或者FRAME或者JS跨域的时候,IE有安全策略限制页面不带cookie,但是如果我们加上P3P,就没有这策略的限制。这也是P3P来突破跨域的可行前提,在访问b.com域后,设置了a.com域的cookie值。
在开发中,我们碰到的跨域主要还是纠结在IE,页面中的IFRAME或者FRAME或者JS跨域的时候,IE有安全策略限制页面不带cookie,但是如果我们加上P3P,就没有这策略的限制。这也是P3P来突破跨域的可行前提。
此次来两个不同域名,用IE6测试一下试一下,实践来源:http://blog.163.com/niuzai369@126/blog/static/3743091520122733733736/
它里面的www.a.com就是咱们对应的www.naimanqi.com.cn,而www.b.com则对应www.naimanqi.cn,如下:
cat /data/htdocs/naimanqi.com.cn/a_setcookie.php
<?php setcookie("test", $_GET['id'], time()+3600, "/", ".naimanqi.com.cn"); ?>
cat /data/htdocs/naimanqi.com.cn/a_getcookie.php
<?php var_dump($_COOKIE); ?>
cat /data/htdocs/naimanqi.cn/b_setcookie.php
<script src="http://www.naimanqi.com.cn/a_setcookie.php?id=www.naimanqi.com.cn"></script>
在IE9和FF和Chrome如下:
http://www.naimanqi.cn/b_setcookie.php
http://www.naimanqi.com.cn/a_getcookie.php
array(1) { ["test"]=> string(19) "www.naimanqi.com.cn" }
但是在IE6下就没法输出这个:
array(1) { ["test"]=> string(19) "www.naimanqi.com.cn" }
将http://www.naimanqi.com.cn/a_setcookie.php文件内容改为如下:
<?php
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie("test", $_GET['id'], time()+3600, "/", ".naimanqi.com.cn");
?>
在ie6下访问http://www.naimanqi.cn/b_setcookie.php域后,设置了www.naimanqi.com.cn域的cookie值。
http://www.naimanqi.cn/b_setcookie.php
http://www.naimanqi.com.cn/a_getcookie.php
array(1) { ["test"]=> string(19) "www.naimanqi.com.cn" }
===========================同域名不同二级域名的实践如下=============================
从上面例子可以看出通过发送P3P头信息而实现的跨域。(在Firefox不发送P3P也能跨域成功)IE高版本也是可以的-AddTime:2016-08-16。
实践一下:
1)b.jackxiang.com/test.html
2)a.jackxiang.com/test.php
此时我们请求 http://b.jackxiang.com/test.html , 他包含一个iframe,会去跨域请求 http://a.jackxiang.com/test.php ,该php页面会尝试 set-cookie。
第一次请求, test.php 会 set-cookie,所以浏览器会收到一个cookie。
理论上认为:
如果 set-cookie 成功,再次请求该页面,浏览器应该会 sent 刚才 recieve 到的cookie。
问题出现了:
可是由于前面说的跨域限制,在IE里的iframe标签是 set-cookie不成功的,所以无法sent刚才收到的cookie。 这里无论是 session cookie 还是本地cookie都是一样。(这里说的是第一次是能收到php设置的cookie的,是再次发起请求时,这个cookie没有在http头里,我用IE10好像不存在这个问题。:(难道 是我安全级别设置太低了?NO,是二级域名相同的问题,哈哈)
实际上看到:
可以看到:
第一次访问:b.jackxiang.com/test.html 出现:alert空。
第二次发包,还是没能sent出去cookie,用Httpwatcher抓包发现cookie是空的。
______________________________________
原因是:以 Internet Explorer 为例,默认情况下,IE的隐私策略如下图所设:
请注意其中这一条:阻止保存可用来联系您的信息而没有您的明确同意的第三方Cookie。 //做互联网那帮起草的人为用户安全着想把权限给用户了,我们程序员被困住了,因为需求:如多个站群的登录的简单实现,辨别等所谓跨站跟踪,行为分析啥的又很有必要。
但是这种情况在加入了P3P header 后会改变。
P3P header允许跨域访问隐私数据,从而可以跨域set-cookie成功
我们修改 http://a.jackxiang.com/test.php 为:
再次访问两次上面的测试过程:
可以看到第二个包已经发送出了收到的cookie
而我们写的javascript也能够弹出cookie了。
我修改成:test=jack,再修改再访问,没有被修改,还是jack,果然不会被修改。
值得注意的是,P3P header只需要设置一次,这样跟在这个P3P header后面的所有 set-cookie,都可以跨域访问了。也就是说: 被P3P header设置过一次后,之后的请求不再需要P3P header,也能够在iframe里跨域发送这些cookie。
但是如果用 set-cookie 去改变设置好的cookie,则不再具有这种跨域访问特性。
P3P header 还有一个特点就是同一个包里只能设置一次,后面的P3P Header不会覆盖前面的P3P header,浏览器只认第一个。
用fiddler抓包看下,这个cookie是怎么设置的呢?
去的请求有没有带cookie,显示:
This request did not send any cookie data.
回来的cookie显示(证明是在服务器回来时就设计了,js再读取出来的,达到了一次就读取,其这个给学习带来难度,往往出现感觉这个cookie是在客户端设置的假象,其实是php的header设置后,前端用js去立即读取,这样一个流程情况):
Response sent 80 bytes of Cookie data:
Set-Cookie: test=jack; expires=Sun, 23-Dec-2018 08:13:02 GMT; domain=.a.jackxiang.com; path=/
P3P Header is present:
CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR
!ERROR! P3P Compact Policy string is not properly quoted.
Validate P3P Policies at: http://www.w3.org/P3P/validator.html
Learn more at: http://fiddler2.com/r/?p3pinfo
其本质就是相当于通过b.jackxiang.com这个域名的php脚本给a.jackxiang.com这个域下设置了一个cookie变量,且是合法的一种办法,用Httpwatcher就会看到如下:
test Sent jack / .a.jackxiang.com (Session) No No
test2 Sent jack2 / .a.jackxiang.com (Session) No No
实践来源:http://www.cnblogs.com/ccdc/archive/2012/05/08/2489535.html
————————————————————————————————————————————————————————————————————————
============================之前的参考如下:======================================
P3P 是说,在页面中 iframe 或者 frame 或者 js 时候,IE 会有安全策略限制 这些页面不带cookie 。如果加上P3P 则没有这个限制。
来自:http://hi.baidu.com/houdelei250/blog/item/da1ad135f0c39147251f14bd.html
http://blog.163.com/niuzai369@126/blog/static/3743091520122733733736/
实际工作中,类似这样的要求很多,比如说,我们有两个域名,我们想实现在一个域名登录后,能自动完成另一个域名的登录,也就是PASSPORT的功能。
我只写一个大概,为了测试的方便,先编辑hosts文件,加入测试域名(C:\WINDOWS\system32\drivers\etc\hosts)
127.0.0.1 www.a.com
127.0.0.1 www.b.com
首先:创建 a_setcookie.php 文件,内容如下:
然后:创建 a_getcookie.php 文件,内容如下:
最后:创建 b_setcookie.php 文件,内容如下:
<script src="http://www.a.com/a_setcookie.php?id=www.b.com"></script>
----------------------------
三个文件创建完毕后,我们通过浏览器依次访问:
http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php
我们会发现,在访问b.com域的时候,我们并没有在a.com域设置上cookie值。
然后我们修改一下a_setcookie.php文件,去掉注释符号,a_setcookie.php即为:
再次通过浏览器依次访问:
http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php
这次,你会发现在访问b.com域的时候,我们设置了a.com域的cookie值。
末了补充一句,似乎只有IE对跨域访问COOKIE限制比较严格,上述代码在FIREFOX下测试,即使不发送P3P头信息,也能成功。
==========================================阅读全文
在开发中,我们碰到的跨域主要还是纠结在IE,页面中的IFRAME或者FRAME或者JS跨域的时候,IE有安全策略限制页面不带cookie,但是如果我们加上P3P,就没有这策略的限制。这也是P3P来突破跨域的可行前提。
此次来两个不同域名,用IE6测试一下试一下,实践来源:http://blog.163.com/niuzai369@126/blog/static/3743091520122733733736/
它里面的www.a.com就是咱们对应的www.naimanqi.com.cn,而www.b.com则对应www.naimanqi.cn,如下:
cat /data/htdocs/naimanqi.com.cn/a_setcookie.php
<?php setcookie("test", $_GET['id'], time()+3600, "/", ".naimanqi.com.cn"); ?>
cat /data/htdocs/naimanqi.com.cn/a_getcookie.php
<?php var_dump($_COOKIE); ?>
cat /data/htdocs/naimanqi.cn/b_setcookie.php
<script src="http://www.naimanqi.com.cn/a_setcookie.php?id=www.naimanqi.com.cn"></script>
在IE9和FF和Chrome如下:
http://www.naimanqi.cn/b_setcookie.php
http://www.naimanqi.com.cn/a_getcookie.php
array(1) { ["test"]=> string(19) "www.naimanqi.com.cn" }
但是在IE6下就没法输出这个:
array(1) { ["test"]=> string(19) "www.naimanqi.com.cn" }
将http://www.naimanqi.com.cn/a_setcookie.php文件内容改为如下:
<?php
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie("test", $_GET['id'], time()+3600, "/", ".naimanqi.com.cn");
?>
在ie6下访问http://www.naimanqi.cn/b_setcookie.php域后,设置了www.naimanqi.com.cn域的cookie值。
http://www.naimanqi.cn/b_setcookie.php
http://www.naimanqi.com.cn/a_getcookie.php
array(1) { ["test"]=> string(19) "www.naimanqi.com.cn" }
===========================同域名不同二级域名的实践如下=============================
从上面例子可以看出通过发送P3P头信息而实现的跨域。(在Firefox不发送P3P也能跨域成功)IE高版本也是可以的-AddTime:2016-08-16。
实践一下:
1)b.jackxiang.com/test.html
2)a.jackxiang.com/test.php
此时我们请求 http://b.jackxiang.com/test.html , 他包含一个iframe,会去跨域请求 http://a.jackxiang.com/test.php ,该php页面会尝试 set-cookie。
第一次请求, test.php 会 set-cookie,所以浏览器会收到一个cookie。
理论上认为:
如果 set-cookie 成功,再次请求该页面,浏览器应该会 sent 刚才 recieve 到的cookie。
问题出现了:
可是由于前面说的跨域限制,在IE里的iframe标签是 set-cookie不成功的,所以无法sent刚才收到的cookie。 这里无论是 session cookie 还是本地cookie都是一样。(这里说的是第一次是能收到php设置的cookie的,是再次发起请求时,这个cookie没有在http头里,我用IE10好像不存在这个问题。:(难道 是我安全级别设置太低了?NO,是二级域名相同的问题,哈哈)
实际上看到:
可以看到:
第一次访问:b.jackxiang.com/test.html 出现:alert空。
第二次发包,还是没能sent出去cookie,用Httpwatcher抓包发现cookie是空的。
______________________________________
原因是:以 Internet Explorer 为例,默认情况下,IE的隐私策略如下图所设:
请注意其中这一条:阻止保存可用来联系您的信息而没有您的明确同意的第三方Cookie。 //做互联网那帮起草的人为用户安全着想把权限给用户了,我们程序员被困住了,因为需求:如多个站群的登录的简单实现,辨别等所谓跨站跟踪,行为分析啥的又很有必要。
但是这种情况在加入了P3P header 后会改变。
P3P header允许跨域访问隐私数据,从而可以跨域set-cookie成功
我们修改 http://a.jackxiang.com/test.php 为:
再次访问两次上面的测试过程:
可以看到第二个包已经发送出了收到的cookie
而我们写的javascript也能够弹出cookie了。
我修改成:test=jack,再修改再访问,没有被修改,还是jack,果然不会被修改。
值得注意的是,P3P header只需要设置一次,这样跟在这个P3P header后面的所有 set-cookie,都可以跨域访问了。也就是说: 被P3P header设置过一次后,之后的请求不再需要P3P header,也能够在iframe里跨域发送这些cookie。
但是如果用 set-cookie 去改变设置好的cookie,则不再具有这种跨域访问特性。
P3P header 还有一个特点就是同一个包里只能设置一次,后面的P3P Header不会覆盖前面的P3P header,浏览器只认第一个。
用fiddler抓包看下,这个cookie是怎么设置的呢?
去的请求有没有带cookie,显示:
This request did not send any cookie data.
回来的cookie显示(证明是在服务器回来时就设计了,js再读取出来的,达到了一次就读取,其这个给学习带来难度,往往出现感觉这个cookie是在客户端设置的假象,其实是php的header设置后,前端用js去立即读取,这样一个流程情况):
Response sent 80 bytes of Cookie data:
Set-Cookie: test=jack; expires=Sun, 23-Dec-2018 08:13:02 GMT; domain=.a.jackxiang.com; path=/
P3P Header is present:
CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR
!ERROR! P3P Compact Policy string is not properly quoted.
Validate P3P Policies at: http://www.w3.org/P3P/validator.html
Learn more at: http://fiddler2.com/r/?p3pinfo
其本质就是相当于通过b.jackxiang.com这个域名的php脚本给a.jackxiang.com这个域下设置了一个cookie变量,且是合法的一种办法,用Httpwatcher就会看到如下:
test Sent jack / .a.jackxiang.com (Session) No No
test2 Sent jack2 / .a.jackxiang.com (Session) No No
实践来源:http://www.cnblogs.com/ccdc/archive/2012/05/08/2489535.html
————————————————————————————————————————————————————————————————————————
============================之前的参考如下:======================================
P3P 是说,在页面中 iframe 或者 frame 或者 js 时候,IE 会有安全策略限制 这些页面不带cookie 。如果加上P3P 则没有这个限制。
来自:http://hi.baidu.com/houdelei250/blog/item/da1ad135f0c39147251f14bd.html
http://blog.163.com/niuzai369@126/blog/static/3743091520122733733736/
实际工作中,类似这样的要求很多,比如说,我们有两个域名,我们想实现在一个域名登录后,能自动完成另一个域名的登录,也就是PASSPORT的功能。
我只写一个大概,为了测试的方便,先编辑hosts文件,加入测试域名(C:\WINDOWS\system32\drivers\etc\hosts)
127.0.0.1 www.a.com
127.0.0.1 www.b.com
首先:创建 a_setcookie.php 文件,内容如下:
然后:创建 a_getcookie.php 文件,内容如下:
最后:创建 b_setcookie.php 文件,内容如下:
<script src="http://www.a.com/a_setcookie.php?id=www.b.com"></script>
----------------------------
三个文件创建完毕后,我们通过浏览器依次访问:
http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php
我们会发现,在访问b.com域的时候,我们并没有在a.com域设置上cookie值。
然后我们修改一下a_setcookie.php文件,去掉注释符号,a_setcookie.php即为:
再次通过浏览器依次访问:
http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php
这次,你会发现在访问b.com域的时候,我们设置了a.com域的cookie值。
末了补充一句,似乎只有IE对跨域访问COOKIE限制比较严格,上述代码在FIREFOX下测试,即使不发送P3P头信息,也能成功。
==========================================阅读全文