ホームページ > バックエンド開発 > PHPチュートリアル > php_PHP チュートリアルでセッション値と Cookie を設定する学習例

php_PHP チュートリアルでセッション値と Cookie を設定する学習例

WBOY
リリース: 2016-07-13 10:35:20
オリジナル
1059 人が閲覧しました

ステップ 1: まず、ログイン ページとコンテンツ ページをローカルに作成します (ログイン後にのみ入力できます)。コードはおおよそ次のとおりです:

以下はログインをリクエストするために使用されるlogin.phpで、ログインが成功するとセッションが登録されます。

コードをコピーします コードは次のとおりです:

session_start();

if (isset($_POST['ユーザー名'])) {
$ユーザー名 = $_POST['ユーザー名'];
$パスワード = $_POST['パスワード'];

if ($ユーザー名 == '管理者' && $password == 'admin') {
using --
echo "-1";
="ユーザー名" />

< ;input type="submit" name="submit" value="submit" />






以下は content.php で、セッションを検証し、ログインした後にのみ正しいコンテンツを表示できます。




コードをコピー

コードは次のとおりです:

session_start();if (isset($_SESSION['username'])) { echo "login ok";} else { echo "ログインしていません";

}
?>



次に、HttpURLConnection クラスについて説明します。まず、このクラスを使用して content.php ページを直接リクエストすると、通常どおり「-1」が返されます。最初にこのクラスを使用してlogin.phpをリクエストし、正しいパラメータを渡すと、ログインが成功したことが表示されます。この時点で、このクラスを使用してcontent.phpをリクエストしても、「-1」が返されます。明らかに、HttpURLConnection はログインのステータスが記録されません。つまり、サーバーはログインに成功したユーザーを認識していますが、今回は content.php をリクエストしたユーザーをまだ認識していません。これは、HttpURLConnection の各リクエストが独立しており、新しいリクエストであるか、各リクエストが新しいセッションであることを示しています。

次に、Chrome を使用して自分で作成したテスト Web ページを開いたところ、同じ Web サイトと同じセッションに、変更されないセッション ID があることがわかりました。

これは上記のことです。どのように更新しても、このサーバーの下の他の Web サイトにジャンプしても、この SESSIONID の値は変わりません。ただし、このサーバーの下のすべてのページを閉じた場合は、このようなページを開くと、SESSIONID 値が再生成されます。

したがって、HttpURLConnection を使用する場合、最初の login.php は SESSIONID です。ログインは実際に成功します。サーバーは SESSIONID を A として記憶しますが、この時点では content.php を要求します。 A が長くなると、サーバーはログインしていないと判断するため、「-1」と表示されます。問題が理解できたので、必要なのは HttpURLConnection リクエストに SESSIONID ヘッダーを追加することだけです。最終的なコードは次のとおりです:

コードをコピーします

コードは次のとおりです:php_PHP チュートリアルでセッション値と Cookie を設定する学習例


public class NetHelper {

/**
* セッションID
**/
private String sessionId = "";

/**
*リクエストを送信し、文字列としてコンテンツを返します
使用 - */
public String request(String url) throws IOException {
U​​RL 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 {
U​​RL uUrl = new URL(url);
HttpURLConnection huc = (HttpURLConnection) uUrl.openConnection();

//設定请要求方式
huc.setRequestMethod (「投稿」);

//设置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();

//ヘッダー中取成果,分割,何のために分割する,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 = データ + 行;
}
return data;
}
}


次に、HttpClient を使用して、同様の手順を実行しました。結果が直接表示され、HttpClient が自動的に管理セッションを確立し、2 回目の要求で手動での削除を必要とせずにセッションを登録できます。

复制代価

代価如下:

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 pPost(url);

//设置postパラメータの方式还真是不人性化啊……
ArrayList pa = new 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()));
文字列データ = "";
文字列行 = "";
しながら((line = br.readLine()) != null) {
data = data + line;
}
return data;
}
}

最後に、セッション認証の方法は 1 回目のセッションであり、登録が成功した場合は各クライアントが SESSIONID を生成し、登録が失敗したか新しい場合はサーバー端末が成功した、登録に成功した SESSIONID を承認します。 SESSIONID、すべてが無許可で登録されます。これが SESSION 認証登録の基本的な状況です。

したがって、HttpURLConnection と HttpClient は両方ともネットワーク要求に使用できますが、HttpRLConnection の毎回の要求はすべて新しい会議であり、SESSIONID を削除する必要がある場合は、手動で設定ヘッダーを削除する必要があり、HttpClient は智能を発揮します。セッションを管理するため、手動での設定は必要ありません。実際には、HttpClint はプログラム内の小さなブラウザーに似ています。

最大のスロットポイント我觉得就是これ二类設置ポストパラメータ的方式都很2B一点都不方便……

さらに、HttpClient は 2 つのリクエストを同時に送信することはできません。1 つのリクエストが終了しない場合、または中断された場合は、別のリクエストが再度表示されます。

したがって、私たちは以下を検討し、その後もずっと HttpURLConnection を使用します。



php_PHP チュートリアルでセッション値と Cookie を設定する学習例http://www.bkjia.com/PHPjc/744333.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/744333.html技術記事最初のステップ:まず、ログインページとコンテンツページ(登録は解除できません)をローカルに書き込みます。コードは大まかに次のとおりです。以下は、ログインを要求するためのlogin.phpで、投稿経由で転送されます...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート