文档库 最新最全的文档下载
当前位置:文档库 › xmppframework for iOS client 注册新帐号

xmppframework for iOS client 注册新帐号

xmppframework for iOS client 注册新帐号
xmppframework for iOS client 注册新帐号

1 带内注册(In-band registration)的概念

带内注册指的是未在你的服务器上开通账号的用户可以通过xmpp协议注册新账号。相反的概念是带外注册(out-of-band registration),例如

你必须到某个指定的web页面进行注册。

如果服务器允许带内注册,那么我们就可以通过自己开发的客户端注册新账号。与带内注册相关的协议是XEP-0077。

2 使用XMPPFramework进行带内注册

XMPPStream.h中声明了进行简单带内注册(提供用户名和密码进行注册)的函数

- (BOOL)registerWithPassword:(NSString *)password error:(NSError **)errPtr;

注册前需要先建立stream连接, 因为没有帐号,所以需要建立匿名连接

NSError *err;

NSString *tjid = [[NSString alloc] initWithFormat:@"anonymous@%@", server.text];

[[delegate xmppStream] setMyJID:[XMPPJID jidWithString:tjid]];

if ( ![[delegate xmppStream] connect:&err])

{

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"连接服务器失败"

message:[err localizedDescription]

delegate:nil

cancelButtonTitle:@"Ok"

otherButtonTitles:nil];

[alertView show];

}

建立连接之后, 不需要进行用户验证, 可以如下处理-- 如果是在注册,则跳过验证这一步

- (void)xmppStreamDidConnect:(XMPPStream *)sender

{

DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

isXmppConnected = YES;

NSError *error = nil;

if (isRegister == YES)

return;

if (![[self xmppStream] authenticateWithPassword:password error:&error]) {

DDLogError(@"Error authenticating: %@", error);

}

}

xmppStream connect 是立即返回的, 所以connect返回并不能说明连接已经建立好. [delegate xmppStream] isConnected 为YES时才能确定连接已经建立好.

连接建立好之后,我们就可以发注册信息

NSString *jid = [[NSString alloc] initWithFormat:@"%@@%@", user.text, server.text];

[[delegate xmppStream] setMyJID:[XMPPJID jidWithString:jid]];

NSError *error=nil;

if (![[delegate xmppStream] registerWithPassword:password.text

error:&error])

{

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"创建帐号失败"

message:[error localizedDescription]

delegate:nil

cancelButtonTitle:@"Ok"

otherButtonTitles:nil];

[alertView show];

}

registerWithPassword:error 方法也是立即返回的

需要通过代理方法来判断注册是否成功

注册成功会调用:- (void)xmppStreamDidRegister:(XMPPStream *)sender

注册失败会调用:- (void)xmppStream:(XMPPStream *)sender

didNotRegister:(NSXMLElement *)error

- (void)xmppStreamDidRegister:(XMPPStream *)sender

{

DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

registerSuccess = YES;

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"创建帐号成功"

message:@""

delegate:self

cancelButtonTitle:@"Ok"

otherButtonTitles:nil];

[alertView show];

}

- (void)xmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error {

DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"创建帐号失败" message:@"用户名冲突"

delegate:nil

cancelButtonTitle:@"Ok"

otherButtonTitles:nil];

[alertView show];

}

php开发实例---用户登陆模块的实现(用户权限的控制、验证码的生成)

PHP开发一个用户登陆模块,关键技术(session会话、cookie应用、GD库应用)大家好,今日我们一起来开发一个PHP随机验证码的生成实例。首先,我们来看一下效果: 开发随机验证码使用到的函数有以下几个。如果有不明白这些函数的使用方法的朋友,请参考PHP5开发手册。 1.imagecreatetruecolor(); //创建一个真彩的画布 2.imagecolorallocate(); //分配颜色 3.imagefill(); //填充颜色 4.imagerectangle(); //画一个矩形,用于绘制验证码的边框 5.imagettftext(); //将文本内容写入到图像中 6.imagesetpixel(); //绘制一个单一像素 6imageline(); //绘制一条线 7.imagepng(); //输出图像 8.imagedesctroy(); //销毁图像,释放内容 PHP开发随机验证码的步骤与思路 1.获取随机验证码的内容 2.创建一个真彩画布,分配字体颜色跟背景颜色 3.开始绘画 4.输出图像 5.销毁图像 6.自定义一个函数用来获取随机验证码 (本人目前在淘宝网上注册了一家小小的店铺,主要营业服装之类的商品。有兴趣有需要的朋友请访问:https://www.wendangku.net/doc/3518311796.html,可以直联系到本人!) 接下来我们开始开发,在网站的根目录下新建一个PHP文件(code.php):

//生成随机验证码 $num=4; $str=getCode($num,0); $_SESSION["code"]=$str; //1.创建图像,定义颜色 $width=$num*20; $height=25; $im=imagecreatetruecolor($width,$height); //1.1字体颜色 $color[] = imagecolorallocate($im,111,0,55); $color[] = imagecolorallocate($im,0,77,0); $color[] = imagecolorallocate($im,0,0,160); $color[] = imagecolorallocate($im,221,111,0); $color[] = imagecolorallocate($im,220,0,0); //1.2背景颜色 $bgcolor = imagecolorallocate($im,240,240,240); //2.开始绘画,使用imagefill()、imagerectangle()函数给图像增加背景颜色与边框颜色imagefill($im,0,0,$bgcolor); imagerectangle($im,0,0,$width-1,$height-1,$color[rand(0,4)]); //2.1使用imagettftext()函数,将文本内容写入到图像中 for($i=0;$i<$num;$i++){ imagettftext($im,14,rand(-20,20),5+(18*$i),20,$color[rand(0,4)],"msyh.ttf",$str[$i]); } //2.2使用imagesetpixel()增加小于100个的干扰点 for($i=0;$i<100;$i++){ //随机颜色 $c=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); imagesetpixel($im,rand(0,$width),rand(0,$height),$c); } //2.3使用imageline()增加小于$num个数的干扰线 for($i=0;$i<$num;$i++){ //随机颜色 $c=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); imageline($im,rand(0,$width),rand(0,$height),rand(0,$width),rand(0,$height),$c); } //3.输出图像,通过header()函数,告诉浏览器输出PNG图像格式,而不是文本形式header("Content-Type:image/png"); imagepng($im); //4.销毁图像,释放内容 imagedestroy($im); //5.自定义函数,获取随机验证码 functiongetCode($m=4,$type=0){ //随机验证码的内容 $str="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

php用户登录页面代码源代码

//登入页面 $conn=mysql_connect('127.0.0.1','root','')or die("连接失败"); mysql_select_db('tujian',$conn)or die("未找到该数据库"); define(ALL_PS,"vivid");mysql_query("set names GBK"); if($_POST[submit]){ $postcode=strtolower($_POST["code"]); $postcode=strtoupper($_POST["code"]); $uid=str_replace(" ","",$_POST[uid]); $sql="select * from users where `uid`='$_POST[uid]'"; $query=mysql_query($sql); $user=is_array($row=mysql_fetch_array($query)); $mi=$user?md5($_POST[pass].ALL_PS)==$row[pass]:FALSE; if($mi){ $_SESSION[uid]=$row[uid]; $_SESSION[name]=$row[name]; $_SESSION[id]=$row[id]; $_SESSION[user_shell]=md5($row[uid].$row[pass].ALL_PS); if( $_SESSION["code"]==$postcode){ echo""; }else{ echo"

验证码输入错误,请重新输入!
"; } } else{ echo"
用户名或密码输入错误
"; session_destroy(); } } ?>