ログイン情報の保存
★クッキーが使えること。でもクッキーにユーザ情報はいれたくないんだもん
1.ログインテーブルにキーカラムと有効期間を追加しとく。loginkeyとexpireなんて風にしとく。
クッキーには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.一人でできちゃったもん
