<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>セッション | Seek Rise</title>
	<atom:link href="https://seek-rise.com/tag/%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3/feed/" rel="self" type="application/rss+xml" />
	<link>https://seek-rise.com</link>
	<description></description>
	<lastBuildDate>Sat, 03 Jan 2026 14:35:19 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://seek-rise.com/wp-content/uploads/2019/10/cropped-favicon-32x32.png</url>
	<title>セッション | Seek Rise</title>
	<link>https://seek-rise.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/><site xmlns="com-wordpress:feed-additions:1">167377966</site>	<item>
		<title>6-13 PHPでログイン処理の基本を作ってみよう</title>
		<link>https://seek-rise.com/web-development/php-basic/post-446/</link>
					<comments>https://seek-rise.com/web-development/php-basic/post-446/#respond</comments>
		
		<dc:creator><![CDATA[NOA（ノア）]]></dc:creator>
		<pubDate>Mon, 22 Dec 2025 14:49:02 +0000</pubDate>
				<category><![CDATA[Web開発学習ロードマップ]]></category>
		<category><![CDATA[6.PHP基礎]]></category>
		<category><![CDATA[Web開発]]></category>
		<category><![CDATA[初心者]]></category>
		<category><![CDATA[PHP基礎]]></category>
		<category><![CDATA[PHPログイン]]></category>
		<category><![CDATA[セッション]]></category>
		<guid isPermaLink="false">https://seek-rise.com/?p=446</guid>

					<description><![CDATA[ここまでで、PHPでWebアプリを作るための すべての基礎部品 が揃いました。 ・フォーム送信・バリデーション・XSS対策・CSRF対策・セッション管理 これらは、ログイン処理 を作るために必要な要素です。 この記事では [&#8230;]]]></description>
										<content:encoded><![CDATA[<p data-start="249" data-end="295">ここまでで、<br data-start="255" data-end="258" />PHPでWebアプリを作るための <strong data-start="275" data-end="287">すべての基礎部品</strong> が揃いました。</p>
<p data-start="297" data-end="347">・フォーム送信<br data-start="304" data-end="307" />・バリデーション<br data-start="315" data-end="318" />・XSS対策<br data-start="324" data-end="327" />・CSRF対策<br data-start="334" data-end="337" />・セッション管理</p>
<p data-start="349" data-end="382">これらは、<br data-start="354" data-end="357" /><strong data-start="357" data-end="367">ログイン処理</strong> を作るために必要な要素です。</p>
<p data-start="384" data-end="461">この記事では、<br data-start="391" data-end="394" />これまで学んだ内容を総動員して、<br data-start="410" data-end="413" /><strong data-start="413" data-end="432">学習用のシンプルなログイン処理</strong> を実装しながら、<br data-start="441" data-end="444" />Webアプリの全体像を整理します。</p>
<hr data-start="463" data-end="466" />

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">この記事で学べること</a></li><li><a href="#toc2" tabindex="0">ログイン処理の全体像</a></li><li><a href="#toc3" tabindex="0">ログインフォームを作成する</a><ol><li><a href="#toc4" tabindex="0">サンプルコード①：ログインフォーム</a></li><li><a href="#toc5" tabindex="0">ポイント</a></li></ol></li><li><a href="#toc6" tabindex="0">ログイン処理（PHP側）</a><ol><li><a href="#toc7" tabindex="0">サンプルコード②：ログイン処理の基本</a></li></ol></li><li><a href="#toc8" tabindex="0">コードの流れを整理する</a></li><li><a href="#toc9" tabindex="0">セッションに保存する意味</a></li><li><a href="#toc10" tabindex="0">ログイン後ページの例</a><ol><li><a href="#toc11" tabindex="0">サンプルコード③：ログイン判定</a></li><li><a href="#toc12" tabindex="0">ポイント</a></li></ol></li><li><a href="#toc13" tabindex="0">ログアウト処理の例</a><ol><li><a href="#toc14" tabindex="0">サンプルコード④：ログアウト</a></li></ol></li><li><a href="#toc15" tabindex="0">このログイン処理は「学習用」</a></li><li><a href="#toc16" tabindex="0">それでもこの実装が重要な理由</a></li><li><a href="#toc17" tabindex="0">初心者がよくつまずくポイント</a></li><li><a href="#toc18" tabindex="0">まとめ</a></li><li><a href="#toc19" tabindex="0">次に読むべき記事</a></li></ol>
    </div>
  </div>

<h2 data-start="468" data-end="481"><span id="toc1">この記事で学べること</span></h2>
<p data-start="483" data-end="547">・ログイン処理の全体構造<br data-start="495" data-end="498" />・フォームから認証までの流れ<br data-start="512" data-end="515" />・セッションを使ったログイン管理<br data-start="531" data-end="534" />・実務につながる考え方</p>
<hr data-start="549" data-end="552" />
<h2 data-start="554" data-end="567"><span id="toc2">ログイン処理の全体像</span></h2>
<p data-start="569" data-end="592">まずは、<br data-start="573" data-end="576" />ログイン処理の流れを整理します。</p>
<ol data-start="594" data-end="706">
<li data-start="594" data-end="610">
<p data-start="597" data-end="610">ログインフォームを表示</p>
</li>
<li data-start="611" data-end="632">
<p data-start="614" data-end="632">ユーザーがID・パスワードを入力</p>
</li>
<li data-start="633" data-end="651">
<p data-start="636" data-end="651">PHPで入力内容を受け取る</p>
</li>
<li data-start="652" data-end="667">
<p data-start="655" data-end="667">バリデーションを行う</p>
</li>
<li data-start="668" data-end="689">
<p data-start="671" data-end="689">認証に成功したらセッションに保存</p>
</li>
<li data-start="690" data-end="706">
<p data-start="693" data-end="706">ログイン後ページを表示</p>
</li>
</ol>
<p data-start="708" data-end="746">今回は、<br data-start="712" data-end="715" /><strong data-start="715" data-end="729">データベースは使わず</strong>、<br data-start="730" data-end="733" />仕組みの理解に集中します。</p>
<hr data-start="748" data-end="751" />
<h2 data-start="753" data-end="769"><span id="toc3">ログインフォームを作成する</span></h2>
<h3 data-start="771" data-end="792"><span id="toc4">サンプルコード①：ログインフォーム</span></h3>
<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary">
<pre class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-html"><span class="hljs-tag">&lt;<span class="hljs-name">form</span></span> <span class="hljs-attr">method</span>=<span class="hljs-string">"post"</span> <span class="hljs-attr">action</span>=<span class="hljs-string">"login.php"</span>&gt;
  <span class="hljs-tag">&lt;<span class="hljs-name">label</span></span>&gt;
    ユーザー名：
    <span class="hljs-tag">&lt;<span class="hljs-name">input</span></span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"username"</span>&gt;
  <span class="hljs-tag">&lt;/<span class="hljs-name">label</span></span>&gt;
  <span class="hljs-tag">&lt;<span class="hljs-name">br</span></span>&gt;
  <span class="hljs-tag">&lt;<span class="hljs-name">label</span></span>&gt;
    パスワード：
    <span class="hljs-tag">&lt;<span class="hljs-name">input</span></span> <span class="hljs-attr">type</span>=<span class="hljs-string">"password"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"password"</span>&gt;
  <span class="hljs-tag">&lt;/<span class="hljs-name">label</span></span>&gt;
  <span class="hljs-tag">&lt;<span class="hljs-name">br</span></span>&gt;
  <span class="hljs-tag">&lt;<span class="hljs-name">button</span></span> <span class="hljs-attr">type</span>=<span class="hljs-string">"submit"</span>&gt;ログイン<span class="hljs-tag">&lt;/<span class="hljs-name">button</span></span>&gt;
<span class="hljs-tag">&lt;/<span class="hljs-name">form</span></span>&gt;
</code></pre>
</div>
<hr data-start="1055" data-end="1058" />
<h3 data-start="1060" data-end="1068"><span id="toc5">ポイント</span></h3>
<p data-start="1070" data-end="1142">・name 属性が PHP 側と対応<br data-start="1088" data-end="1091" />・password は type=&#8221;password&#8221; を使用<br data-start="1122" data-end="1125" />・action で送信先を指定</p>
<hr data-start="1144" data-end="1147" />
<h2 data-start="1149" data-end="1164"><span id="toc6">ログイン処理（PHP側）</span></h2>
<p data-start="1166" data-end="1195">次に、<br data-start="1169" data-end="1172" />フォーム送信を受け取る PHP を作成します。</p>
<h3 data-start="1197" data-end="1219"><span id="toc7">サンプルコード②：ログイン処理の基本</span></h3>
<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary">
<pre class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-php"><span class="hljs-meta">&lt;?php</span>
<span class="hljs-title function_ invoke__">session_start</span>();

<span class="hljs-variable">$errors</span> = [];

<span class="hljs-variable">$username</span> = <span class="hljs-variable">$_POST</span>[<span class="hljs-string">'username'</span>] ?? <span class="hljs-string">''</span>;
<span class="hljs-variable">$password</span> = <span class="hljs-variable">$_POST</span>[<span class="hljs-string">'password'</span>] ?? <span class="hljs-string">''</span>;

<span class="hljs-keyword">if</span> (<span class="hljs-variable">$username</span> === <span class="hljs-string">''</span>) {
  <span class="hljs-variable">$errors</span>[] = <span class="hljs-string">'ユーザー名を入力してください'</span>;
}

<span class="hljs-keyword">if</span> (<span class="hljs-variable">$password</span> === <span class="hljs-string">''</span>) {
  <span class="hljs-variable">$errors</span>[] = <span class="hljs-string">'パスワードを入力してください'</span>;
}

<span class="hljs-keyword">if</span> (<span class="hljs-keyword">empty</span>(<span class="hljs-variable">$errors</span>)) {
  <span class="hljs-keyword">if</span> (<span class="hljs-variable">$username</span> === <span class="hljs-string">'admin'</span> &amp;&amp; <span class="hljs-variable">$password</span> === <span class="hljs-string">'password'</span>) {
    <span class="hljs-variable">$_SESSION</span>[<span class="hljs-string">'is_login'</span>] = <span class="hljs-literal">true</span>;
    <span class="hljs-variable">$_SESSION</span>[<span class="hljs-string">'username'</span>] = <span class="hljs-variable">$username</span>;
    <span class="hljs-keyword">echo</span> <span class="hljs-string">'ログイン成功'</span>;
  } <span class="hljs-keyword">else</span> {
    <span class="hljs-keyword">echo</span> <span class="hljs-string">'ユーザー名またはパスワードが違います'</span>;
  }
} <span class="hljs-keyword">else</span> {
  <span class="hljs-keyword">foreach</span> (<span class="hljs-variable">$errors</span> <span class="hljs-keyword">as</span> <span class="hljs-variable">$error</span>) {
    <span class="hljs-keyword">echo</span> <span class="hljs-variable">$error</span> . <span class="hljs-string">'&lt;br&gt;'</span>;
  }
}
</code></pre>
</div>
<hr data-start="1759" data-end="1762" />
<h2 data-start="1764" data-end="1778"><span id="toc8">コードの流れを整理する</span></h2>
<p data-start="1780" data-end="1803">このコードでは、<br data-start="1788" data-end="1791" />次のことを行っています。</p>
<p data-start="1805" data-end="1864">・フォームデータを受け取る<br data-start="1818" data-end="1821" />・未入力チェックを行う<br data-start="1832" data-end="1835" />・認証情報を確認する<br data-start="1845" data-end="1848" />・成功したらセッションに保存</p>
<p data-start="1866" data-end="1904">これまで学んだ内容が<br data-start="1876" data-end="1879" /><strong data-start="1879" data-end="1892">すべて含まれている</strong> 点に注目してください。</p>
<hr data-start="1906" data-end="1909" />
<h2 data-start="1911" data-end="1926"><span id="toc9">セッションに保存する意味</span></h2>
<p data-start="1928" data-end="1937">ログイン成功時に、</p>
<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary">
<pre class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-php"><span class="hljs-variable">$_SESSION</span>[<span class="hljs-string">'is_login'</span>] = <span class="hljs-literal">true</span>;
</code></pre>
</div>
<p data-start="1981" data-end="1990">を保存することで、</p>
<p data-start="1992" data-end="2008">・このユーザーはログイン済み</p>
<p data-start="2010" data-end="2040">という状態を、<br data-start="2017" data-end="2020" /><strong data-start="2020" data-end="2034">ページをまたいで保持</strong> できます。</p>
<hr data-start="2042" data-end="2045" />
<h2 data-start="2047" data-end="2060"><span id="toc10">ログイン後ページの例</span></h2>
<p data-start="2062" data-end="2094">ログイン後に表示するページでは、<br data-start="2078" data-end="2081" />次のようにチェックします。</p>
<h3 data-start="2096" data-end="2115"><span id="toc11">サンプルコード③：ログイン判定</span></h3>
<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary">
<pre class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-php"><span class="hljs-meta">&lt;?php</span>
<span class="hljs-title function_ invoke__">session_start</span>();

<span class="hljs-keyword">if</span> (<span class="hljs-keyword">empty</span>(<span class="hljs-variable">$_SESSION</span>[<span class="hljs-string">'is_login'</span>])) {
  <span class="hljs-keyword">echo</span> <span class="hljs-string">'ログインしてください'</span>;
  <span class="hljs-keyword">exit</span>;
}

<span class="hljs-keyword">echo</span> <span class="hljs-string">'ようこそ、'</span> . <span class="hljs-title function_ invoke__">htmlspecialchars</span>(<span class="hljs-variable">$_SESSION</span>[<span class="hljs-string">'username'</span>], ENT_QUOTES, <span class="hljs-string">'UTF-8'</span>) . <span class="hljs-string">'さん'</span>;
</code></pre>
</div>
<hr data-start="2305" data-end="2308" />
<h3 data-start="2310" data-end="2318"><span id="toc12">ポイント</span></h3>
<p data-start="2320" data-end="2358">・ログインしていなければ処理を止める<br data-start="2338" data-end="2341" />・表示時は XSS 対策を行う</p>
<p data-start="2360" data-end="2393">ログイン判定は、<br data-start="2368" data-end="2371" /><strong data-start="2371" data-end="2389">保護したいページすべてに必要</strong> です。</p>
<hr data-start="2395" data-end="2398" />
<h2 data-start="2400" data-end="2412"><span id="toc13">ログアウト処理の例</span></h2>
<h3 data-start="2414" data-end="2432"><span id="toc14">サンプルコード④：ログアウト</span></h3>
<div class="contain-inline-size rounded-2xl corner-superellipse/1.1 relative bg-token-sidebar-surface-primary">
<pre class="overflow-y-auto p-4" dir="ltr"><code class="whitespace-pre! language-php"><span class="hljs-meta">&lt;?php</span>
<span class="hljs-title function_ invoke__">session_start</span>();

<span class="hljs-variable">$_SESSION</span> = [];
<span class="hljs-title function_ invoke__">session_destroy</span>();

<span class="hljs-keyword">echo</span> <span class="hljs-string">'ログアウトしました'</span>;
</code></pre>
</div>
<hr data-start="2524" data-end="2527" />
<h2 data-start="2529" data-end="2546"><span id="toc15">このログイン処理は「学習用」</span></h2>
<p data-start="2548" data-end="2557">重要な注意点です。</p>
<p data-start="2559" data-end="2565">今回の例は、</p>
<p data-start="2567" data-end="2594">・パスワードを平文で比較<br data-start="2579" data-end="2582" />・データベース未使用</p>
<p data-start="2596" data-end="2618">という<br data-start="2599" data-end="2602" /><strong data-start="2602" data-end="2614">学習用の簡易実装</strong> です。</p>
<p data-start="2620" data-end="2625">実務では、</p>
<p data-start="2627" data-end="2653">・パスワードのハッシュ化<br data-start="2639" data-end="2642" />・データベース連携</p>
<p data-start="2655" data-end="2664">が必須になります。</p>
<hr data-start="2666" data-end="2669" />
<h2 data-start="2671" data-end="2688"><span id="toc16">それでもこの実装が重要な理由</span></h2>
<p data-start="2690" data-end="2706">このログイン処理を理解できると、</p>
<p data-start="2708" data-end="2757">・Webアプリの全体像が見える<br data-start="2723" data-end="2726" />・フレームワークの仕組みが分かる<br data-start="2742" data-end="2745" />・次の学習につながる</p>
<p data-start="2759" data-end="2773">という大きな意味があります。</p>
<p data-start="2775" data-end="2814">「なぜ Laravel がこうなっているのか」<br data-start="2798" data-end="2801" />が、後で必ず理解できます。</p>
<hr data-start="2816" data-end="2819" />
<h2 data-start="2821" data-end="2838"><span id="toc17">初心者がよくつまずくポイント</span></h2>
<p data-start="2840" data-end="2854">ログイン処理で多いミスです。</p>
<p data-start="2856" data-end="2908">・session_start の書き忘れ<br data-start="2876" data-end="2879" />・ログイン判定を書いていない<br data-start="2893" data-end="2896" />・XSS対策を忘れる</p>
<p data-start="2910" data-end="2939">「ログインできた＝完成」<br data-start="2922" data-end="2925" />ではない点に注意しましょう。</p>
<hr data-start="2941" data-end="2944" />
<h2 data-start="2946" data-end="2952"><span id="toc18">まとめ</span></h2>
<p data-start="2954" data-end="2967">PHPでのログイン処理は、</p>
<p data-start="2969" data-end="3004">・フォーム<br data-start="2974" data-end="2977" />・バリデーション<br data-start="2985" data-end="2988" />・セッション<br data-start="2994" data-end="2997" />・条件分岐</p>
<p data-start="3006" data-end="3030">を組み合わせた<br data-start="3013" data-end="3016" /><strong data-start="3016" data-end="3026">基礎の集大成</strong> です。</p>
<p data-start="3032" data-end="3079">ここまで実装できれば、<br data-start="3043" data-end="3046" />PHP基礎としては<br data-start="3055" data-end="3058" /><strong data-start="3058" data-end="3072">実務の入口に十分到達</strong> しています。</p>
<hr data-start="3081" data-end="3084" />
<h2 data-start="3086" data-end="3097"><span id="toc19">次に読むべき記事</span></h2>
<p data-start="3099" data-end="3131">▶ 次の記事<br data-start="3105" data-end="3108" /><a href="https://seek-rise.com/web-development/php-basic/post-449/">6-14 PHP基礎のまとめと次のステップ</a></p>
<p data-start="3133" data-end="3169">▶ 関連記事<br data-start="3139" data-end="3142" /><a href="https://seek-rise.com/web-development/php-basic/post-443/">6-12 PHPでセッションを使って状態を管理する</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://seek-rise.com/web-development/php-basic/post-446/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">446</post-id>	</item>
	</channel>
</rss>
