php设置session值和cookies的学习示例_php实例
第一步:先在本地写一个登陆页面和一个内容页面(登陆了才能进去)吧。代码大致如下:
下面是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的值就被重新生成了。
于是用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 = 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就可以登录上。
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参数的方式还真是不人性化啊……
ArrayList
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吧。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.
