欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOCX文档下载  

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

    • 资源ID:11646382       资源大小:14.62KB        全文页数:10页
    • 资源格式: DOCX        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    php设置session值和cookies的学习示例_ 始终没弄懂Session,cookies什么的登陆验证究竟是怎么回事,昨天分别用HttpURLConnection和HttpClient两个类来试验了一下,基本弄明白了Session验证登陆的机制和这两个类的区分。现在分享给大家 第一步:先在本地写一个登陆页面和一个内容页面(登陆了才能进去)吧。代码大致如下: 下面是login.php,用于恳求登陆的,通过post传递参数,假如登陆胜利就会注册session。 代码如下: ?php session_start(); if (isset($_POSTusername) $username = $_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" value="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,依旧是返回"-1",很明显,HttpURLConnection并没有记录我们登陆的状态,或者劝说务器认识刚刚登陆胜利的人,但这次恳求content.php的人它依旧不认识。这就说明白HttpURLConnection的每一次恳求都是独立的,都是一次新的恳求,或者说每一次恳求都是一个新的会话(session)。 然后我就用chrome去开我自己写的那个测试的网页,发觉在同一个网站下,同一次会话中,有一个sessionid是不会变的。 就是上面这个东西,假如开着某个页面,无论如何刷新,或者跳转到这个服务器下的其他网站,这个SESSIONID的值都不会转变,但是假如关掉这个服务器下的全部页面,再重新打开这样的一个页面,这个SESSIONID的值就被重新生成了。 于是用HttpURLConnection的状况,第一次登陆login.php是一个SESSIONID,的确登陆胜利了,服务器记住的是SESSIONID为A的状况(假设是A好了),但再去恳求content.php的时候,SESSIONID就不是A了,服务器就认为你没有登陆,于是就显示了“-1”。问题搞明白了,那么只需要在HttpURLConnection恳求的时候,给它加上SESSIONID这个头部就行了。最终代码如下: 代码如下: public class NetHelper /* * SESSIONID * */ private String 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自己看看就明白了 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) 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.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 line = "" 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 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) 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 BasicNameValuePair( "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; return data; 最终总结一下,Session验证的方式是在一次会话中,为每一个客户端都生成了一个SESSIONID,假如是胜利登陆的,服务器端就会记录好,登陆胜利的SESSIONID,假如登陆失败或者新的SESSIONID,都将无法验证登陆,这就是SESSION验证登陆的基本状况。 而HttpURLConnection和HttpClient这两个类都可以用来网络恳求,但稍有不同,HttpuRLConnection每一次恳求都是新的会话,假如需要去验证SESSIONID,就必需手动的去设置Header,HttpClient就能智能的管理Session,不需要手动设置,事实上HttpClint就类似于一个程序中的小扫瞄器。 最大的槽点我觉得就是这两个类设置post参数的方式都很2B一点都不便利 另外HttpClient不能同时发送两次恳求,假如一个恳求还没有结束或者关闭,又马上开启另一个恳求。就会报警告,截个图吧 所以我综合考虑了下,以后还是尽量都用法HttpURLConnection吧。 更多信息请查看IT技术专栏 .

    注意事项

    本文(php设置session值和cookies的学习示例_.docx)为本站会员(PIYPING)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开