function generate_sso_ticket(){
global $_SGLOBAL;
// md5 uid+uip+domain+time
$parser = parse_url($_SGLOBAL['refer']);
$domain = $parser['host'];
$clientip = getonlineip();
$ticket = md5($_SGLOBAL['supe_uid'].$clientip.UC_KEY.substr($_SGLOBAL['timestamp'],0,7));
$_SGLOBAL['db']->query("REPLACE INTO ".tname('tickets')." (ticket, uid, username, domain, clientip, updatetime) VALUES(
'{$ticket}', '{$_SGLOBAL['supe_uid']}', '{$_SGLOBAL['supe_username']}', '{$domain}', '{$clientip}', NOW()
)");
// $ticket = authcode("{$ticket}\t{$domain}\t{$clientip}",'ENCODE');
return $ticket;
}function generate_sso_url($ticket){
global $_SGLOBAL,$_PCONFIG;
if(empty($_SGLOBAL['refer'])){
$_SGLOBAL['refer'] = generate_https_url($_PCONFIG['refer']);
}
$_SGLOBAL['refer'] = urldecode($_SGLOBAL['refer']);
return (strpos($_SGLOBAL['refer'],'?') !== false) ? $_SGLOBAL['refer'].'&ticket='.urlencode($ticket) : $_SGLOBAL['refer'].'?ticket='.urlencode($ticket);
}function get_sso_by_ticket(){
global $_SGLOBAL;
$ticket = '';
if(empty($_REQUEST['ticket']) || strlen($_REQUEST['ticket']) != 32){
return NO_TICKET.'|'.NO_TICKET_STR;
}
$ticket = $_REQUEST['ticket'];
$domain = trim($_REQUEST['domain']);
$clientip = trim($_REQUEST['ip']);

$ticketInfo = $_SGLOBAL['db']->fetch_array($_SGLOBAL['db']->query("SELECT * FROM ".tname('tickets')." WHERE ticket = '{$ticket}'"));
if(empty($ticketInfo) || $ticketInfo['domain'] != $domain || $ticketInfo['clientip'] != $clientip || md5($ticketInfo['uid'].$clientip.UC_KEY.substr($_SGLOBAL['timestamp'],0,7)) != $ticketInfo['ticket']){
return ERROR_TICKET.'|'.ERROR_TICKET_STR;
}
$_SGLOBAL['db']->query("DELETE FROM ".tname('tickets')." WHERE ticket = '{$ticketInfo['ticket']}' OR updatetime < '".date('Y-m-d H:00:00',$_SGLOBAL['timestamp'])."'");
return $ticketInfo['uid'].'|'.$ticketInfo['username'];
}