| 2 |
* |
* |
| 3 |
* $Revision$ |
* $Revision$ |
| 4 |
* $Log$ |
* $Log$ |
| 5 |
|
* Revision 1.8 2004/11/26 06:36:55 aga |
| 6 |
|
* ・createSession, getSession を作成. |
| 7 |
|
* |
| 8 |
* Revision 1.7 2004/11/26 04:51:47 youi |
* Revision 1.7 2004/11/26 04:51:47 youi |
| 9 |
* dbprefixを定義した. |
* dbprefixを定義した. |
| 10 |
* insertAccountを定義した. |
* insertAccountを定義した. |
| 525 |
|
|
| 526 |
/** |
/** |
| 527 |
* |
* |
| 528 |
|
* セッションを作成しxoops_vpaccount_sessionに書き込む。 sessionid_tをsessionに返す。 |
| 529 |
|
* |
| 530 |
|
* @param uid xoops_usersのuid |
| 531 |
|
* @param remoteHost remote ip (host order) |
| 532 |
|
* @param session sessionid_tを受け取るためのポインタ。 |
| 533 |
|
* @return RES_OK 成功 |
| 534 |
|
* @return RES_DB_QUERY_ERROR DB問い合わせ中のエラー |
| 535 |
|
*/ |
| 536 |
|
static result_t addSession( userid_t uid, unsigned long remoteHost, sessionid_t* session ) |
| 537 |
|
{ |
| 538 |
|
result_t ret; |
| 539 |
|
string sql = "INSERT INTO " + dbprefix + "_vpaccount_session (uid,remote_host) values (" + |
| 540 |
|
unsignedIntToString(uid) + "," + unsignedIntToString((unsigned int)remoteHost) + ")"; |
| 541 |
|
if ( 0 == mysql_query( mysql, sql.c_str() ) ){ |
| 542 |
|
*session = (int)mysql_insert_id(mysql); |
| 543 |
|
ret = RES_OK; |
| 544 |
|
} |
| 545 |
|
else { |
| 546 |
|
ret = RES_DB_QUERY_ERROR; |
| 547 |
|
} |
| 548 |
|
return ret; |
| 549 |
|
} |
| 550 |
|
|
| 551 |
|
|
| 552 |
|
/** |
| 553 |
|
* |
| 554 |
* ログイン認証とセッション作成 |
* ログイン認証とセッション作成 |
| 555 |
* |
* |
| 556 |
* @param uname ログイン名 |
* @param uname ログイン名 |
| 575 |
if( result ){ |
if( result ){ |
| 576 |
MYSQL_ROW row = mysql_fetch_row(result); |
MYSQL_ROW row = mysql_fetch_row(result); |
| 577 |
if( row ){ |
if( row ){ |
| 578 |
// uid -> create session |
userid_t uid = atoi(row[0]); |
| 579 |
sql = "INSERT INTO " + dbprefix + "_vpaccount_session (uid,remote_host) values (" + row[0] + ",0)"; |
ret = addSession( uid, 0, session ); |
|
if ( 0 == mysql_query( mysql, sql.c_str() ) ){ |
|
|
*session = (int)mysql_insert_id(mysql); |
|
|
ret = RES_OK; |
|
|
} |
|
|
else { |
|
|
ret = RES_DB_QUERY_ERROR; |
|
|
} |
|
| 580 |
}else{ |
}else{ |
| 581 |
ret = RES_LOGIN_FAILUE; |
ret = RES_LOGIN_FAILUE; |
| 582 |
} |
} |
| 602 |
void logoutUser( sessionid_t sid ){ |
void logoutUser( sessionid_t sid ){ |
| 603 |
result_t ret; |
result_t ret; |
| 604 |
string sql; |
string sql; |
|
sprintf( sidstr, |
|
| 605 |
sql = "DELETE FROM " + dbprefix + "_vpaccount_session WHERE sid=" + intToString((int)sid); |
sql = "DELETE FROM " + dbprefix + "_vpaccount_session WHERE sid=" + intToString((int)sid); |
| 606 |
if ( 0 == mysql_query( mysql, sql.c_str() ) ){ |
if ( 0 == mysql_query( mysql, sql.c_str() ) ){ |
| 607 |
if ( mysql_affected_rows(mysql) == 1 ){ |
if ( mysql_affected_rows(mysql) == 1 ){ |
| 623 |
* ば,session_tを作成する。 |
* ば,session_tを作成する。 |
| 624 |
* データベースにセッションと引数の情報を記録する |
* データベースにセッションと引数の情報を記録する |
| 625 |
* |
* |
| 626 |
* @param |
* @param sessionid xoopsのsession_id |
| 627 |
* @return |
* @param uid xoops_usersのuid |
| 628 |
|
* @param remoteHost remote ip (host order) |
| 629 |
|
* @param session sessionid_tを受け取るためのポインタ。 |
| 630 |
|
* @return RES_OK |
| 631 |
|
* @return RES_ERROR |
| 632 |
|
* @return RES_DB_QUERY_ERROR |
| 633 |
* |
* |
| 634 |
*/ |
*/ |
| 635 |
result_t createSession( const char* sessionid, userid_t uid, unsigned long remoteHost, sessionid_t* sessions ) |
result_t createSession( const char* sessionid, userid_t uid, unsigned long remoteHost, sessionid_t* session ) |
| 636 |
{ |
{ |
| 637 |
|
result_t ret; |
| 638 |
|
string sql; |
| 639 |
|
|
| 640 |
|
string escSessionid = addSlashes(sessionid); |
| 641 |
|
sql = "SELECT sess_id from " + dbprefix + "_session where sess_id='" + escSessionid + "'"; |
| 642 |
|
if( 0 == mysql_query( mysql, sql.c_str( ) ) ){ |
| 643 |
|
MYSQL_RES* result = mysql_store_result( mysql ); |
| 644 |
|
if( result ){ |
| 645 |
|
MYSQL_ROW row = mysql_fetch_row(result); |
| 646 |
|
if( row ){ |
| 647 |
|
ret = addSession( uid, remoteHost, session ); |
| 648 |
|
}else{ |
| 649 |
|
ret = RES_ERROR; |
| 650 |
|
} |
| 651 |
|
mysql_free_result( result ); |
| 652 |
|
}else { |
| 653 |
|
ret = RES_DB_QUERY_ERROR; |
| 654 |
|
} |
| 655 |
|
}else{ |
| 656 |
|
ret = RES_DB_QUERY_ERROR; |
| 657 |
|
} |
| 658 |
|
|
| 659 |
|
|
| 660 |
return RES_ERROR; |
return RES_ERROR; |
| 661 |
} |
} |
| 662 |
|
|
| 664 |
* |
* |
| 665 |
* セッションの詳細をsession_tで取得する.<br> |
* セッションの詳細をsession_tで取得する.<br> |
| 666 |
* |
* |
| 667 |
* @param |
* @param sess_id |
| 668 |
|
* @param session |
| 669 |
* @return |
* @return |
| 670 |
* |
* |
| 671 |
*/ |
*/ |
| 672 |
result_t getSessionDetail( sessionid_t sess_id, const session_t** session ) |
result_t getSession( sessionid_t sess_id, const session_t** ppsession ) |
| 673 |
{ |
{ |
| 674 |
|
result_t ret; |
| 675 |
|
string sql; |
| 676 |
|
|
| 677 |
|
sql = "SELECT sid, uid, unix_timestamp(timestamp), remote_host from " + dbprefix + |
| 678 |
|
"_vpaccount_session where sid=" + unsignedIntToString((unsigned int)sess_id); |
| 679 |
|
if( 0 == mysql_query( mysql, sql.c_str( ) ) ){ |
| 680 |
|
MYSQL_RES* result = mysql_store_result( mysql ); |
| 681 |
|
if( result ){ |
| 682 |
|
MYSQL_ROW row = mysql_fetch_row(result); |
| 683 |
|
if( row ){ |
| 684 |
|
session_t *p = new session(); |
| 685 |
|
p->setSessionID(sess_id); |
| 686 |
|
p->setUserID(atoi(row[1])); |
| 687 |
|
p->setDate(atoi(row[2])); |
| 688 |
|
p->setRemoteHost(atoi(row[3])); |
| 689 |
|
*ppsession = p; |
| 690 |
|
ret = RES_OK; |
| 691 |
|
}else{ |
| 692 |
|
ret = RES_NO_SUCH_SESSION; |
| 693 |
|
} |
| 694 |
|
mysql_free_result( result ); |
| 695 |
|
}else { |
| 696 |
|
ret = RES_DB_QUERY_ERROR; |
| 697 |
|
} |
| 698 |
|
}else{ |
| 699 |
|
ret = RES_DB_QUERY_ERROR; |
| 700 |
|
} |
| 701 |
|
|
| 702 |
return RES_ERROR; |
return RES_ERROR; |
| 703 |
} |
} |
| 704 |
|
|