php设置session值和cookies的学习示例
一直没弄懂Session,cookies什么的登陆验证到底是怎么回事,昨天分别用HttpURLConnection和HttpClient两个类来实验了一下,基本弄明白了Session验证登陆的机制和
第一步:先在本地写一个登陆页面和一个内容页面(登陆了才能进去)吧。代码大致如下:
下面是login.php,用于请求登陆的,通过post传递参数,如果登陆成功就会注册session。
复制代码 代码如下:
session_start();
if (isset($_POST['username'])) {
$username = $_POST['username'];
$password = $_POST['password'];
if ($username == 'admin' && $password == 'admin') {
$_SESSION['username'] = $username;
echo "进入网站";
} else {
echo "-1";
}
}
?>
下面是content.php,会验证session,用来当网站的内容页,登陆了才能看到正确的内容。
复制代码 代码如下:
session_start();
if (isset($_SESSION['username'])) {
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的值就被重新生成了。
复制代码 代码如下:
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 = aaa[0];
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就可以登录上。
复制代码 代码如下:

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu
