-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp-session.html
74 lines (72 loc) · 3.81 KB
/
app-session.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Ethnamドキュメント</title>
<link href="css/style.css" media="all" rel="stylesheet" />
<link href="css/github.css" media="all" rel="stylesheet" />
</head>
<body>
<p><a href=".">目次</a></p>
<div class="blob instapaper_body">
<article class="markdown-body entry-content">
<h1>Sessionを利用する</h1>
<ul>
<li>ActionClassからセッションを呼び出す </li>
<li>簡単な認証の仕組みを作ってみる。
<ul>
<li>actionを作る </li>
<li>Configファイルにパスワードを書き込む </li>
<li>authenticateメソッドの追加 </li>
<li>loginアクションの作成 </li>
</ul></li>
<li>複雑な認証の仕組みを実現する。 </li>
<li>毎回authenticateメソッドにお約束を書くのが面倒 </li>
</ul>
<h2>Sessionを利用する</h2>
<p>会員制サイトや管理画面を作成する場合、認証の仕組みが必要になります。 Ethna_Sessionを利用することでSessionを利用した認証を簡単に作ることができます。</p>
<h2>ActionClassからセッションを呼び出す</h2>
<p>ActionClassはメンバ変数にセッションオブジェクトを保持しているので簡単に参照できます。 例えば、セッションの値を取得する場合</p>
<pre><code>function perform()
{
var_dump($this->session->get('hoge'));
}</code></pre>
<p>とすることでセッションhogeを取得できます。</p>
<h2>簡単な認証の仕組みを作ってみる。</h2>
<p>よくある掲示板スクリプトの管理画面を作ってみます。 Formにパスワードを入力するとConfigファイルに書き込まれた値と てらしあわあせて、同じであればSessionを開始。 管理画面ではSessionがstartしているかを確認する。というものです。</p>
<h3>actionを作る</h3>
<p>認証する画面(login)と認証先の画面(index)を作ります。</p>
<pre><code>ethna add-action login
ethna add-action index</code></pre>
<h3>Configファイルにパスワードを書き込む</h3>
<p>/etc/[app-id]-ini.phpの配列に以下の値を追加</p>
<pre><code>'password' => 'hogehoge',</code></pre>
<h3>authenticateメソッドの追加</h3>
<p>indexのActionClassにauthenticateメソッドを追加します</p>
<pre><code>function authenticate()
{
if ( !$this->session->isStart() ) {
return 'login';
}
}</code></pre>
<p>これで、indexにアクセスしてもセッションが始まってない場合、ログイン画面に飛ぶようになります。</p>
<h3>loginアクションの作成</h3>
<p>普通にフォームを作ってperformで確認。OKならセッションスタート。</p>
<pre><code>function perform()
{
$password = $this->config->get('password');
if ( $password == $this->af->get('password')) {
$this->session->start();
}
}</code></pre>
<p>でできた気がする。(要修正。アクションとかも全部ちゃんと書く)</p>
<h2>複雑な認証の仕組みを実現する。</h2>
<p>roleの概念を付加した認証の仕組みも簡単に作れます。 ユーザ名と、パスワードでログインして、各ユーザのグループ権限ごとに 行う処理を変えるとか。認証情報を管理するクラスを作っておいて、 それをauthenticateの中で呼び出してやるだけです。</p>
<h2>毎回authenticateメソッドにお約束を書くのが面倒</h2>
<p>上記の方法だと認証が必要になるページはすべてauthenticateメソッドを書くハメになります。 それは面倒なのでauthenticateメソッドを書いたActionクラスを継承してしまいましょう。</p> </article>
</div>
<div class="site-footer">
@2015 <a href="https://twitter.com/DQNEO">DQNEO</a>
</div>
</body>
</html>