php设置session值和cookies的学习示例_.docx

上传人:PIYPING 文档编号:11646382 上传时间:2021-08-27 格式:DOCX 页数:10 大小:14.62KB
返回 下载 相关 举报
php设置session值和cookies的学习示例_.docx_第1页
第1页 / 共10页
php设置session值和cookies的学习示例_.docx_第2页
第2页 / 共10页
php设置session值和cookies的学习示例_.docx_第3页
第3页 / 共10页
php设置session值和cookies的学习示例_.docx_第4页
第4页 / 共10页
php设置session值和cookies的学习示例_.docx_第5页
第5页 / 共10页
亲,该文档总共10页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《php设置session值和cookies的学习示例_.docx》由会员分享,可在线阅读,更多相关《php设置session值和cookies的学习示例_.docx(10页珍藏版)》请在三一文库上搜索。

1、php设置session值和cookies的学习示例_ 始终没弄懂Session,cookies什么的登陆验证究竟是怎么回事,昨天分别用HttpURLConnection和HttpClient两个类来试验了一下,基本弄明白了Session验证登陆的机制和这两个类的区分。现在分享给大家 第一步:先在本地写一个登陆页面和一个内容页面(登陆了才能进去)吧。代码大致如下: 下面是login.php,用于恳求登陆的,通过post传递参数,假如登陆胜利就会注册session。 代码如下: ?php session_start(); if (isset($_POSTusername) $username =

2、 $_POSTusername; $password = $_POSTpassword; if ($username = admin $password = admin) $_SESSIONusername = $username; echo a href=content.php进入网站/a; else echo -1; ? html body form action= method=post input type=text name=username / input type=password name=password / input type=submit name=submit val

3、ue=submit / /form /body /html 下面是content.php,会验证session,用来当网站的内容页,登陆了才能看到正确的内容。 代码如下: ?php session_start(); if (isset($_SESSIONusername) echo login ok; else echo not login; ? 接下来先讲HttpURLConnection这个类,先用法这个类挺直恳求content.php页面,理所应当的返回了-1。假如先用这个类去恳求login.php,并传递正确的参数,就会显示登陆胜利,这个时候再去用这个类恳求content.php,依旧

4、是返回-1,很明显,HttpURLConnection并没有记录我们登陆的状态,或者劝说务器认识刚刚登陆胜利的人,但这次恳求content.php的人它依旧不认识。这就说明白HttpURLConnection的每一次恳求都是独立的,都是一次新的恳求,或者说每一次恳求都是一个新的会话(session)。 然后我就用chrome去开我自己写的那个测试的网页,发觉在同一个网站下,同一次会话中,有一个sessionid是不会变的。 就是上面这个东西,假如开着某个页面,无论如何刷新,或者跳转到这个服务器下的其他网站,这个SESSIONID的值都不会转变,但是假如关掉这个服务器下的全部页面,再重新打开这样

5、的一个页面,这个SESSIONID的值就被重新生成了。 于是用HttpURLConnection的状况,第一次登陆login.php是一个SESSIONID,的确登陆胜利了,服务器记住的是SESSIONID为A的状况(假设是A好了),但再去恳求content.php的时候,SESSIONID就不是A了,服务器就认为你没有登陆,于是就显示了“-1”。问题搞明白了,那么只需要在HttpURLConnection恳求的时候,给它加上SESSIONID这个头部就行了。最终代码如下: 代码如下: public class NetHelper /* * SESSIONID * */ private Str

6、ing sessionId = ; /* * 发送一条恳求,将内容以字符串返回 * param url 恳求的地址 * return 返回的内容 * */ public String request(String url) throws IOException URL uUrl = new URL(url); HttpURLConnection huc = (HttpURLConnection) uUrl.openConnection(); huc.addRequestProperty(Cookie, sessionId); /为什么是“Cookie”,Chrome打开F12自己看看就明白了

7、huc.connect(); BufferedReader br = new BufferedReader(new InputStreamReader(huc.getInputStream(); String data = ; String line = ; while (line = br.readLine() != null) data = data + line; return data; /* * 发送登陆恳求,并将SESSIONID保存起来 * param url 登陆恳求的地址 * return 返回的内容 * */ public String login(String url)

8、throws IOException URL uUrl = new URL(url); HttpURLConnection huc = (HttpURLConnection) uUrl.openConnection(); /设置恳求方式 huc.setRequestMethod(POST); /设置post参数 StringBuffer params = new StringBuffer(); params.append(username=).append(admin).append().append(password=).append(admin); byte bytes = params.

9、toString().getBytes(); huc.getOutputStream().write(bytes); huc.connect(); /从headers中取出来,并分割,为什么要分割,Chrome打开F12自己看看就明白了 String aaa = huc.getHeaderField(Set-Cookie).split(;); sessionId = aaa0; BufferedReader br = new BufferedReader(new InputStreamReader(huc.getInputStream(); String data = ; String lin

10、e = ; while (line = br.readLine() != null) data = data + line; return data; 接下来就是用法HttpClient,代码类似的,我做了相同的试验,结果就挺直出来了,HttpClient会自动的管理Session,其次次恳求不需要手动去设置Session就可以登录上。 代码如下: public class NetClient private HttpClient client = null; public NetClient() client = new DefaultHttpClient(); public String

11、request(String url) throws ClientProtocolException, IOException HttpPost post = new HttpPost(url); HttpResponse res = client.execute(post); BufferedReader br = new BufferedReader(new InputStreamReader(res.getEntity().getContent(); String data = ; String line = ; while (line = br.readLine() != null)

12、data = data + line; return data; public String login(String url) throws ClientProtocolException, IOException HttpPost post = new HttpPost(url); /设置post参数的方式还真是不人性化啊 ArrayListNameValuePair pa = new ArrayListNameValuePair(); pa.add( new BasicNameValuePair( username, admin); pa.add( new BasicNameValueP

13、air( password, admin); post.setEntity( new UrlEncodedFormEntity(pa, UTF-8); HttpResponse res = client.execute(post); BufferedReader br = new BufferedReader(new InputStreamReader(res.getEntity().getContent(); String data = ; String line = ; while (line = br.readLine() != null) data = data + line; ret

14、urn data; 最终总结一下,Session验证的方式是在一次会话中,为每一个客户端都生成了一个SESSIONID,假如是胜利登陆的,服务器端就会记录好,登陆胜利的SESSIONID,假如登陆失败或者新的SESSIONID,都将无法验证登陆,这就是SESSION验证登陆的基本状况。 而HttpURLConnection和HttpClient这两个类都可以用来网络恳求,但稍有不同,HttpuRLConnection每一次恳求都是新的会话,假如需要去验证SESSIONID,就必需手动的去设置Header,HttpClient就能智能的管理Session,不需要手动设置,事实上HttpClint就类似于一个程序中的小扫瞄器。 最大的槽点我觉得就是这两个类设置post参数的方式都很2B一点都不便利 另外HttpClient不能同时发送两次恳求,假如一个恳求还没有结束或者关闭,又马上开启另一个恳求。就会报警告,截个图吧 所以我综合考虑了下,以后还是尽量都用法HttpURLConnection吧。 更多信息请查看IT技术专栏 .

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1