読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

Play FrameworkでセッションごとにIDを割り振り、サーバで保持して、ブラウザに表示してみる。

<スポンサーリンク>

セッションとは

クライアントから何か処理を開始するときに、サーバー側でセッションIDを割り振り、クライアントに渡す。
この際に、セッションIDに付随する情報はサーバ側で保持する。

では、このセッションIDっぽいのをPlay Frameworkで使ってみようと、以下のStackoverflowをおおいに参考にした。
http://stackoverflow.com/questions/9416964/where-is-session-id-in-play-2-0

回答の、

Session id? it sounds so Java EE anyways...

がカッコ良かったw

Play FrameworkでSession ID

とりあえずviewの方。
index.scala.html

@(msg: String)

@import helper._
@import helper.twitterBootstrap._
@main("Sample Page") {

	<h1>Hello!</h1>
	<p>@msg</p>
	<form method="get" action="/submit">
		名前:<input type="text" name="name" id="name" value="hoge">
		<input type="submit" value="リクエスト">
	</form>
}

で、routesファイルはこんな感じ。

# Home page
GET     /                           controllers.Application.index()

# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file               controllers.Assets.at(path="/public", file)

GET   /submit                     controllers.Application.submit()

で、Controller。
Application.java

package controllers;

import play.data.Form;
import play.mvc.Controller;
import play.mvc.Result;
import views.html.index;

public class Application extends Controller {

	public static Result index() {
		String uuid=session("uuid");
		if(uuid==null) {
		    uuid=java.util.UUID.randomUUID().toString();
		    session("uuid", uuid);
		}
		return ok(index.render("UserID:" + uuid));
	}

	public static Result submit() {
		String name = Form.form().bindFromRequest().get("name");
		String myId = session("uuid");
		return ok(index.render("リクエスト受け取った!貴様の名前は→" + name +"だな!?" + "セッションIDは:" + myId + "だッッ!"));
	}
}

ここの、

String uuid=session("uuid");
if(uuid==null) {
    uuid=java.util.UUID.randomUUID().toString();
    session("uuid", uuid);
}

という部分で、ユーザーごとというか、ブラウザごと?のユーザーIDをuuidという名前で設定している。
さて、実際に見てみよう。
f:id:sho322:20140105172929j:plain
セッションIDは、

8f131ba4-9cfb-4f15-b653-a1cabe175a47

次に、画面の「リクエスト」を押すと・・・
f:id:sho322:20140105172938j:plain
こんな感じで、セッションIDが保持されていることがわかる。

リクエスト受け取った!貴様の名前は→SESSION TESTだな!?セッションIDは:8f131ba4-9cfb-4f15-b653-a1cabe175a47だッッ!

今後は普段使ってないIEで同じようなリクエストを投げてみると・・・
f:id:sho322:20140105172946j:plain

最初のChromeでのセッションIDとは違うIDが割り振られている。

UserID:308170cb-6f60-4de7-ad29-31fd487278d5

これを活用すると、ログインしたユーザーだけ処理を進める・・・みたいなことが実現できそうだ。