ロードされるとログインダイアログを表示するログインページがあります。JQuery
ログインダイアログは、を使用する単なるダイアログですAjax call
。そんな感じ:
$(function() {
var _width = $.browser.msie ? 316 : 'auto';
var loginDialog = $('#loginDialog');
loginDialog.dialog({
closeOnEscape: false,
open: function() {
$(this).parent().find('.ui-dialog-titlebar-close').hide();
},
resizable: false,
position: 'center',
stack: true,
draggable: false,
height: 'auto',
width: _width,
modal: true,
buttons: {
'submit': function() {
$.ajax({
type: 'post',
dataType: 'html',
url: '/ProjectName/Scripts/php/AccountController.php',
cache: false,
// async: false,
data: $('#loginForm').serialize(),
success: function(accessStatus) {
if(accessStatus === 'granted') {
loginDialog.dialog('close');
}
},
error: function(request, status, error) {
// handle it in a specific manner
alert(error);
}
});
}
}
});
したがって、(サーバー側で)問題がなければ、ダイアログを閉じるだけです。
それからAccountController.php
今のところファイルに私はそのようなものを持っています:
<?php
session_start();
if(IsAjaxRequest()) {
if(isset($_REQUEST['username']) && isset($_REQUEST['password'])) {
require_once('LDAPHandler.php');
// credentials
$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
// ... more parameters
// ... Fetch against AD
if(IsInAdminRole($username, $password)) {
// ... establishing mysql connection & setting connection options
// and then:
mysql_query(
'insert into accounts'.
'(login, sid) values({$username}, {session_id()})'.
'on duplicate key update sid=values(sid)'
);
// write response
echo 'granted';
}
}
}
?>
私が欲しいのは、データベースsid
の関連レコード()に保存することです。Accounts table
私を混乱させるもの:
- ログインサーバーが成功した後にユーザーがページを複製した場合、私が理解している限り、同じセッションCookieを使用しますか?私は正しいですか?ブラウザを閉じない限り。
- さまざまなブラウザで状況を処理するにはどうすればよいですか?
session_start()
セッションを使用する必要がある場合はいつでも、ページで呼び出す必要があることを読みました。これは、sid
ログイン時に書き込まれるものとは異なりますか?- 重複したくない場合は、ユーザーが同じリソースに複数回(同時に)アクセスするべきではないことを意味します。これを処理するにはどちらの方法が最適ですか?
- また、ユーザーがであると言うために、ある種のフラグ(おそらくアカウントテーブルのフィールド)を使用する必要があることも理解しています。
active
別の方法では、最後のフラグのみを保存しsid
ます。または、セッションが終了したらデータベースからユーザーを削除するのがより良い解決策ですか?
どうもありがとう!