首页 > 作文

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

更新时间:2023-04-06 23:08:20 阅读: 评论:0

第一步:先在本地写一个登陆页面和一个内容页面(登陆了才能进去)吧。代码大致如下:

下面是login.php,用于请求登陆的,通过post传递参数,如果登陆成功就会注册ssion。

复制代码 代码如下:

<?php

ssion_start();

if (ist($_post[‘urname’])) {
$urname = $_post[‘urname’];
$password = $_post[‘password’];

if ($urname == ‘admin’ && $password =鞭炮结= ‘admin’) {
$_ssion[‘urname’] = $urname;
echo “<a href=’content.php’>进入网站</a>”;
} el {
echo “-1”;
}
}
?>
<html>
<body>
<form action=”” method=”post”>
<input type=”text” name=”urname” />
<input type=”password” name=”password” />
<input type=”submit” name=”submit” value=”submit” />
</form>
</body>
</html>

下面是content.php,会验证ssion,用来当网站的内容页,登陆了才能看到正确的nba总冠军排名内容。

复制代码 代码如下:

<?php

ssion_start();

if (ist($_ssion[‘urname’])) {

echo “login ok”;

} el {

echo “not login”;

}

?>

接下来先讲httpurlconnection这个类,先使用这个类直接请求content.php页面,理所应当的返回了”-1″。如果先用这个类去请求login.php,并传递正确的参数,就会显示登陆成功,这个时候再去用这个类请求content.php,依然是返回”-1″,很显然,httpurlconnection并没有记录我们登陆的状态,或者说服务器认识刚刚登陆成功的人,但这次请求content.php的人它依然不认识。这就说明了httpurlconnection的每一次请求都是独立的,都是一次新的请求,或者说每一次请求都是一个新的会话(ssion)。

然后我就用chrome去开我自己写的那个测试的网页,发现在同一个网站下,同一次会话中,有一个ssionid是不会变的。

就是上面这个东西,如果开着某个页面,无论如何刷新,或者跳转到这个服务器下的其他网站,这个ssionid的值都不会改变,但是如果关掉这个服务器下的所有页面,再重新打开这样的一个页面,这个ssionid的值就被重新生成了。

于是用httpurlconnection的情况,第一次登陆login.php是一个ssionid,确实登陆成功了,服务器记住的是ssionid为a的情况(假设是a好了),但再去请求content.php的时候,ssionid就不是a了,服务器就认为你没有登陆,于是就显示了“-1”。问题搞明白了,那么只需要在httpurlconnection请求的时候,给它加上ssionid这个头部就行了。最终代码如下:

复制代码 代码如下:

public class nethelper {

/**

* ssionid

* */

private string ssionid = “”;

/**

* 发送一条请求,将内容以字符串返回

* @param url 请求的地址

* @return 返回的内容

* */

public string request(string url) throws ioexception {

url uurl = new ur故宫简介和历史l(url);

httpurlconnection huc = (httpurlconnection) uurl.openconnection();

huc.addrequestproperty(“cookie”, ssionid); //为什么是“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;

}

/**

* 发送登陆请求,并将ssionid保存起来

* @param url 登陆请求的地址

* @return 返回的内容

* */

public string login(string url) throws ioexception {

url uurl = new url(url);

httpurlconnection huc = (httpurlconnection) uurl.openconnection();

//设置请求方式

huc.trequestmethod(“post”);

//设置post参数

stringbuffer params = new stringbuffer();

params.append(“urname=”).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(“t-cookie”).split(“;”);

ssionid = aaa[0];

bufferedreader br = new bufferedreader(new inputstreamreader(huc.getinputstream()));

成都出租房屋 string data = &#横七竖八打一字8220;”;

string line = “”;

while ((line = br.readline()) != null) {

data = data + line;

}

return data;

}

}

接下来就是使用httpclient,代码类似的,我做了相同的实验,结果就直接出来了,httpclient会自动的管理ssion,第二次请求不需要手动去设置ssion就可以登录上。

复制代码 代码如下:

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);

httprespon 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参数的方式还真是不人性化啊……

arraylist<namevaluepair> pa = new arraylist<namevaluepair>();

pa.add( new basicnamevaluepair( “urname”, “admin”));

pa.add( new basicnamevaluepair( “password”, “admin”));

post.tentity( new urlencodedformentity(pa, “utf-8”));

httprespon 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;
}
}

最后总结一下,ssion验证的方式是在一次会话中,为每一个客户端都生成了一个ssionid,如果是成功登陆的,服务器端就会记录好,登陆成功的ssionid,如果登陆失败或者新的ssionid,都将无法验证登陆,这就是ssion验证登陆的基本情况。

而httpurlconnection和httpclient这两个类都可以用来网络请求,但稍有不同,httpurlconnection每一次请求都是新的会话,如果需要去验证ssionid,就必须手动的去设置header,httpclient就能智能的管理ssion,不需要手动设置,实际上httpclint就类似于一个程序中的小浏览器。

最大的槽点我觉得就是这两个类设置post参数的方式都很2b一点都不方便……

另外httpclient不能同时发送两次请求,如果一个请求还没有结束或者关闭,又马上开启另一个请求。就会报警告,截个图吧

所以我综合考虑了下,以后还是尽量都使用httpurlconnection吧。

本文发布于:2023-04-06 23:08:18,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/45bfc7438e79d48587ebf748c2e58f89.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:php设置session值和cookies的学习示例.doc

本文 PDF 下载地址:php设置session值和cookies的学习示例.pdf

标签:代码   都是   页面   就会
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图