Cocos2d-x游戏开发之cookie存取(八)[小鱼游戏开发]

Cocos2d-x游戏开发之cookie存取(八)由小鱼游戏开发精心整理,并分享给大家。喜欢该资源的小伙伴请下载使用,注册、回复、每日签到、点赞送大量积分,满足您免费下载的愿望

最近项目之中需要一个大家比较的熟悉的COOKIE,这是做为客户端与服务端交互的一个信用凭证。当建立连接后,服务器第一次会发放一个信用凭证COOKIE给客户端,那么下次客户端访问服务器的时候,只要带上自己的COOKIE信息,服务器就不会再次生成COOKIE信息,这次会话连接就算Ok了。如果客户端的信息发生了变化,那么post服务器数据发生变化,服务器会重新发送COOKIE给客户端,重新建立会话连接。

首先补充点,COOKIE的基本信息。
COOKIE一词用在程序设计中是一种能够让网站服务器把少量数据储存到客户端,
的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。当你浏览某网站时,由Web服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。当你再次来到该网站时,网站通过读取Cookies,得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。从本质上讲,它可以看作是你的身份证。保存的信息片断以”名/值”对(name-value pairs)的形式储存,一个”名/值”对仅仅是一条命名的数据。
一个网站只能取得它放在你的电脑中的信息,它无法从其它的Cookies文件中取得信息,也无法得到你的电脑上的其它任何东西。 Cookies中的内容大多数经过了加密处理,因此一般用户看来只是一些毫无意义的字母数字组合,只有服务器的CGI处理程序才知道它们真正的含义。
由于Cookies是我们浏览的网站传输到用户计算机硬盘中的文本文件或内存中的数据,因此它在硬盘中存放的位置与使用的操作系统和浏览器密切相关。在Windows 9X系统计算机中,Cookies文件的存放位置为C:/Windows/Cookies,在Windows NT/2000/XP的计算机中,Cookies文件的存放位置为C:/Documents and Settings/用户名/Cookies,在Windows Vista/7的计算机中,Cookies文件的存放位置为C:UsersuserAppDataRoamingMicrosoftWindowsCookiesLow。

硬盘中的Cookies文件可以被Web浏览器读取,它的命令格式为:用户名@网站地址[数字].txt。如笔者计算机中的一个Cookies文件名为:ch@163[1].txt。要注意的是:硬盘中的Cookies属于文本文件,不是程序。

好的,第二步介绍我们使用的工具是Curl和Cocos2d—X游戏开发引擎。

下面直接看代码分析:

 

void HelloWorld::beginRequest()
{

    FILE *fp = fopen("/Users/kevin/Desktop/test.txt", "ab");
    string filePath = "/Users/kevin/Desktop/test.txt";
    
    //char *temp;
    //测试多线程请求,不知为何仍是不行
    /*CURLM *multiHandle = curl_multi_init();
    CURL *easyHandle1,*easyHandle2;
    int requerstCount;
    easyHandle1 = curl_easy_init();
    easyHandle2 = curl_easy_init();
    if (easyHandle1 && easyHandle2) {
        curl_easy_setopt(easyHandle1, CURLOPT_URL, this->serverIP1.c_str());
        curl_easy_setopt(easyHandle1, CURLOPT_VERBOSE, 1L);
        curl_easy_setopt(easyHandle1, CURLOPT_WRITEDATA, &fp);
        curl_easy_setopt(easyHandle1, CURLOPT_WRITEFUNCTION, HelloWorld::writeData);
        
        
        curl_easy_setopt(easyHandle2, CURLOPT_URL,this->serverIP1.c_str());
        curl_easy_setopt(easyHandle2, CURLOPT_VERBOSE, 1L);
        curl_easy_setopt(easyHandle1, CURLOPT_WRITEDATA, &fp);
        curl_easy_setopt(easyHandle2, CURLOPT_WRITEFUNCTION, HelloWorld::writeData);
        
        
        curl_easy_perform(easyHandle1);
        curl_easy_perform(easyHandle2);
        curl_multi_add_handle(multiHandle, easyHandle1);
        curl_multi_add_handle(multiHandle, easyHandle2);
        curl_multi_setopt(multiHandle, CURLMOPT_MAXCONNECTS, 100);
        curl_multi_perform(multiHandle, &requerstCount);
        
        fclose(fp);
        curl_easy_cleanup(easyHandle1);
        curl_easy_cleanup(easyHandle2);
        curl_multi_cleanup(multiHandle);
    }*/
    char *postData = "lx=1";
    char *postData1 = "un=Player_65049&pw=";
    CURL *easyHandle1 = curl_easy_init();
    if (easyHandle1) {
        curl_easy_setopt(easyHandle1, CURLOPT_URL, this->serverIP5                                                                              .c_str());
        
        curl_easy_setopt(easyHandle1, CURLOPT_POSTFIELDS, postData1);
        
        //1.CURLOPT_COOKIE--手动添加cookie,以分号作为结尾
        //curl_easy_setopt(easyHandle1, CURLOPT_COOKIE, "JSESSIONID=CCB8610A181C98BE95308574F99D1279.jvm1;jforumUserId=43;jforumAutoLogin=1;jforumUserHash=663d669fe871afd8267becb6363cc27a;");
        
        
        //2.CURLOPT_COOKIEJAR--本地存储cookie文件,是 Netscape HTTP Cookie File格式
        //而且在开始curl连接后,开始将http头文件的cookie文件解析后存储刀本地文件夹
        //curl会自动判读cookie文件的情况,若不存在,才会存储
        curl_easy_setopt(easyHandle1, CURLOPT_COOKIEJAR,filePath.c_str());
        
        
        //3.CURLOPT_COOKIEFILE---curl自动从本地的cookie文件里面读取所有的数据,
        //并且会自动添加到请求的http头文件里面,作为与服务器交互的信用凭据
        curl_easy_setopt(easyHandle1, CURLOPT_COOKIEFILE,filePath.c_str());
        
        
        curl_easy_setopt(easyHandle1, CURLOPT_VERBOSE, 1L);
        curl_easy_setopt(easyHandle1, CURLOPT_WRITEFUNCTION, HelloWorld::writeData);
    }
   
    curl_easy_perform(easyHandle1);
    curl_easy_cleanup(easyHandle1);
    fclose(fp);
}

 

好的,来看下Curl的版本输出内容吧,嘎嘎。

 

* About to connect() to 192.168.1.5 port 80 (#0)
*   Trying 192.168.1.5...
* connected
* Connected to 192.168.1.5 (192.168.1.5) port 80 (#0)
> POST /jforum?module=user&action=sjlogin HTTP/1.1
Host: 192.168.1.5
Accept: */*
Cookie: jforumUserHash=e45b9fdeffc6cad348142f6dd868b919; jforumAutoLogin=1; jforumUserId=39; JSESSIONID=838C7E384B72A2CB9EF23D5685CC6989.jvm1
Content-Length: 19
Content-Type: application/x-www-form-urlencoded

* upload completely sent off: 19 out of 19 bytes
< HTTP/1.1 200 OK
* Replaced cookie JSESSIONID="3725401C7552496D087AFBF0BBAC76C7.jvm1" for domain 192.168.1.5, path /, expire 0
< Set-Cookie: JSESSIONID=3725401C7552496D087AFBF0BBAC76C7.jvm1; Path=/
* Replaced cookie jforumAutoLogin="1" for domain 192.168.1.5, path /, expire 1404958821
< Set-Cookie: jforumAutoLogin=1; Expires=Thu, 10-Jul-2014 02:20:21 GMT; Path=/
* Replaced cookie jforumUserHash="8316f5d96375db86927e6ff2048c57ad" for domain 192.168.1.5, path /, expire 1404958821
< Set-Cookie: jforumUserHash=8316f5d96375db86927e6ff2048c57ad; Expires=Thu, 10-Jul-2014 02:20:21 GMT; Path=/
* Replaced cookie jforumUserId="39" for domain 192.168.1.5, path /, expire 1404958821
< Set-Cookie: jforumUserId=39; Expires=Thu, 10-Jul-2014 02:20:21 GMT; Path=/
< Content-Type: text/html;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Wed, 10 Jul 2013 02:20:21 GMT
< Server: Apache-Coyote/1.1
<

 

 

好的,现在来看下本地的COOKIE的庐山真面目吧,嘎嘎。

# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

192.168.1.5    FALSE    /    FALSE    0    JSESSIONID    838C7E384B72A2CB9EF23D5685CC6989.jvm1
192.168.1.5    FALSE    /    FALSE    1404908184    jforumUserId    39
192.168.1.5    FALSE    /    FALSE    1404908184    jforumAutoLogin    1
192.168.1.5    FALSE    /    FALSE    1404908184    jforumUserHash    e45b9fdeffc6cad348142f6dd868b919

这样以后每次的会话只要有cookie就可以了。

在curl遇到奇怪的问题,最好要打开调试选项,而且可以结合火狐浏览器的httpfox插件

  1. curl_easy_setopt(m_pCurl, CURLOPT_DEBUGFUNCTION, CurlDebug);//打印完整的调试信息
  2. curl_easy_setopt(m_pCurl, CURLOPT_VERBOSE, 1);//打印调试信息

轻松一刻:

母鸡对公牛发牢骚:“人类让我多下蛋,自己却计划生育,这太不公平了!”老公牛说:“你这算个屁呀?全世界人民都喝我老婆的奶,谁TM管我叫爹
 下载地址
登录  查看下载地址。

提示:注册,评论,每日签到,点赞可获得积分。

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

联系我们

联系我们

在线咨询: QQ交谈

邮箱: 2805477110@qq.com

周一至周六,8:00-21:00,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部
切换注册

登录

忘记密码 ?

切换登录

注册