OpenJamの一人でできるもん!
Amebaでブログを始めよう!

ログイン情報の保存

★クッキーが使えること。でもクッキーにユーザ情報はいれたくないんだもん


1.ログインテーブルにキーカラムと有効期間を追加しとく。loginkeyexpireなんて風にしとく。

クッキーにはloginkeyだけを保存して、クッキーを受け取ったらそいつでログインテーブルを検索する。

select * from login_table where クッキー=loginkey and expire > sysdate; とか。



2.見事に該当するレコードがあったらログイン処理をすっとばしちゃう。か、ログイン情報を表示してあげちゃう。

よく会員サイトにある感じかな?アクセスするとユーザIDとパスワードが入力済みになってる奴。



3.サンプルってこれで?(LoginFilter.php)

<?php
function postgres_connect($dbhost,$dbname,$dbuser,$dbpass) {
if (!($cn = pg_connect("host=hoge dbname=hoge"))) {
echo "Not Connected";
die;
}
return $cn;
}

function postgres_close($cn) {
pg_close($cn);
}
function setup_auto_login($userid, $userpasswd) {
// 認証が完了し、自動ログインを設定
$auto_login_key = sha1(uniqid(mt_rand(1,999999999), true)); // keyを生成
$sql = "insert into auto_login (userid, userpass, loginkey, expire, regdate) values (" ."'". pg_escape_string($userid). "', '". pg_escape_string($userpasswd). "', '". pg_escape_string($auto_login_key)."', '". date('Y-m-d H:i:s', time()+30) ."', '". date('Y-m-d H:i:s', time()) ."');";
pg_query($sql);
setcookie ('auto_login', $auto_login_key, time() + 30); // 30秒
}

function authorization($userid,$passwd,$flag){

$strResult=array(NULL,NULL);
if (!empty($_COOKIE['auto_login'])) {
$con=postgres_connect($dbhost,$dbname,$dbuser,$dbpass);
// クッキーが取得できる&自動ログインが有効ならばクッキーで認証
$sql = "select userid,expire,loginkey from auto_login where loginkey = '". pg_escape_string($_COOKIE['auto_login']) ."' and expire > '". date('Y-m-d H:i:s'). "';";
$result = pg_query($sql);
while ($row = pg_fetch_row($result)) {
$strResult[0] = $row[0]; //userid
$strResult[1] = $row[1]; //expire
}
}
postgres_close($con);
}else{
if ($flag=="on" && empty($_COOKIE['auto_login'])) {
// はじめての自動ログインなら新しい自動ログインkeyを設定
$con=postgres_connect($dbhost,$dbname,$dbuser,$dbpass);
$sql = "select userid from auto_login where userid = '". pg_escape_string($userid) ."' and userpass = '". pg_escape_string($passwd). "';";
$result = pg_query($sql);
while ($row = pg_fetch_row($result)) {
$strResult[0] = $row[0]; //expire
}
if(!is_null($strResult[0])){
$sql = "delete from auto_login where userid = '". pg_escape_string($userid). "';";
pg_query($sql);
setup_auto_login($userid,$passwd);
postgres_close($con);
header("Location: ./LoginFilter.php");
}else{
$strResult = null;
postgres_close($con);
}
}else{
// falseの場合ユーザIDとパスワードで認証 (通常の認証)
}
}


クッキーがあったらauthorization

クッキーがなくてもユーザidとパスワードが入力されてたらauthorization


authorizationの配列がかえってきたら認証済み画面へ

でなきゃログイン画面へ


4.一人でできちゃったもん



Jboss内のインスタンスを複数起動する

★エイリアシングでNICに2つIPを割り当てとく。192.168.50.100 & 192.168.50.200


1.myappをコピー

cp ${JBOSS_HOME}/server/myapp ${JBOSS_HOME}/server/myapp2


2.bindingサービスを有効にしとく

vi ${JBOSS_HOME}/server/myapp/conf/jboss-service.xml // ports-defaultを使用

vi ${JBOSS_HOME}/server/myapp2/conf/jboss-service.xml // ports-01を使用


bindingの設定は、${JBOSS_HOME}/docs/examples/binding-manager/sample-binding.xmlを適当にコピって使用


このときmyapp2のバインドアドレスをmyappと同じにしておけば、

異なるIPアドレスで(100&200)jbossのインスタンスを参照できる。


3.起動時に-bをつけとく

${JBOSS_HOME}/bin/run.sh -c myapp -b 192.168.50.100 &

${JBOSS_HOME}/bin/run.sh -c myapp2 -b 192.168.50.200 &


4.停止させちゃう

${JBOSS_HOME}/bin/shutdown.sh -s jnp://192.168.50.xxx:内部バインドアドレス


5.一人でできちゃったもん