首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
post传递数据到网址来进行登录,同样的代码ajax可以为什么socket却失效了
### 问题描述 我需要实现的功能是在用户登录时将用户的用户名和密码保存在session和cookie中,然后使用post将用户名和密码提交到一个后台网址,实现用户登录之后点击自己的用户名就可以自动跳转到后台而免除后台的登录操作,目前这个功能使用ajax来提交已经成功实现,但是我改成websocket来进行提交,虽然返回的字段依然是传递登录成功,可是当用户点击自己的用户名却依然要进行登录才能进入后台主页,我想知道,同样的操作为什么ajax可以而socket不行,如果需要使用socket完成这个功能需要怎么修改 ### Swoole版本,PHP版本,以及操作系统版本信息 swoole4.4.3 php7.2 win10 64位 ### 相关代码 ```php //以下为成功的ajax代码 $.ajax({ type: "post", url: d.api, //此为提交的网址 dataType: 'json', crossDomain: true, xhrFields: { withCredentials: true //跨域 }, async: false, //因为这是异步执行,要不然没执行完就返回undefined,所以要改成同步 data: { timeStamp: d.timeStamp, //时间戳 loginCode: d.loginCode, //登录code userName: d.userName, //用户名 已经保存到session和cookie userPwd: d.userPwd, //密码 已经保存到session loginType: d.loginType, //登录type 1001为登录,1002为退出,此处为登录 }, success: function (data) { strRtn = data; //此处返回的为loginSuccess字符串,登录成功 }, error: function (data) { strRtn = data.responseText; } }); if(strRtn == "LoginFail"){ alert("登录失败,请重新登录!"); }else{ alert("登录成功!"); $(".index-logins").hide(); $("#login").hide(); $(".login-block").hide(); $("#user").show(); $("#username").html(username); location.reload(); } ``` ```php //此处为登录成功但无法跳过后台登录的socket代码 $data = explode('^', $frame->data); //获取客户端传递的用户信息字符串,并拆分成数组 $url = $data[0]; //传递地址 $timeStamp = $data[1]; //时间戳 $loginCode = $data[2]; //登录code $userName = $data[3]; //用户名 $userPwd = $data[4]; //密码 $loginType = $data[5]; //登录码1001 $link = "timeStamp=".$timeStamp."&loginCode=".$loginCode."&userName=".$userName."&userPwd=".$userPwd."&loginType=".$loginType; //拼接url后缀 $link_length = strlen($link); $options = array( 'http' => array( 'method'=>'POST', 'header'=> "Content-type: application/x-www-form-urlencoded\r\n" . "Content-length: $link_length\r\n", 'content' => $link ) ); $res = file_get_contents($url,false,stream_context_create($options));//post提交,此处打印返回的是loginSuccess登录成功 ``` ```php //以下是使用curl提交,依然无效 $data = explode('^', $frame->data); //获取客户端传递的用户信息字符串,并拆分成数组 $url = $data[0]; //传递地址 $timeStamp = $data[1]; //时间戳 $loginCode = $data[2]; //登录code $userName = $data[3]; //用户名 $userPwd = $data[4]; //密码 $loginType = $data[5]; //登录码1001 $link = "timeStamp=".$timeStamp."&loginCode=".$loginCode."&userName=".$userName."&userPwd=".$userPwd."&loginType=".$loginType; //拼接url后缀 $ch = curl_init();//初始化curl curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页 curl_setopt($ch, CURLOPT_HEADER, 0);//设置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $link); $res = curl_exec($ch);//运行curl curl_close($ch); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 我希望使用socket提交并登录成功后 用户点击自己的用户名可以正常跳转到后台并跳过登录操作,实际上返回登录成功却依然需要输入用户名密码进行登录后台
发布于2年前 · 6 次浏览 · 来自
提问
九州仟寒
### 问题描述 我需要实现的功能是在用户登录时将用户的用户名和密码保存在session和cookie中,然后使用post将用户名和密码提交到一个后台网址,实现用户登录之后点击自己的用户名就可以自动跳转到后台而免除后台的登录操作,目前这个功能使用ajax来提交已经成功实现,但是我改成websocket来进行提交,虽然返回的字段依然是传递登录成功,可是当用户点击自己的用户名却依然要进行登录才能进入后台主页,我想知道,同样的操作为什么ajax可以而socket不行,如果需要使用socket完成这个功能需要怎么修改 ### Swoole版本,PHP版本,以及操作系统版本信息 swoole4.4.3 php7.2 win10 64位 ### 相关代码 ```php //以下为成功的ajax代码 $.ajax({ type: "post", url: d.api, //此为提交的网址 dataType: 'json', crossDomain: true, xhrFields: { withCredentials: true //跨域 }, async: false, //因为这是异步执行,要不然没执行完就返回undefined,所以要改成同步 data: { timeStamp: d.timeStamp, //时间戳 loginCode: d.loginCode, //登录code userName: d.userName, //用户名 已经保存到session和cookie userPwd: d.userPwd, //密码 已经保存到session loginType: d.loginType, //登录type 1001为登录,1002为退出,此处为登录 }, success: function (data) { strRtn = data; //此处返回的为loginSuccess字符串,登录成功 }, error: function (data) { strRtn = data.responseText; } }); if(strRtn == "LoginFail"){ alert("登录失败,请重新登录!"); }else{ alert("登录成功!"); $(".index-logins").hide(); $("#login").hide(); $(".login-block").hide(); $("#user").show(); $("#username").html(username); location.reload(); } ``` ```php //此处为登录成功但无法跳过后台登录的socket代码 $data = explode('^', $frame->data); //获取客户端传递的用户信息字符串,并拆分成数组 $url = $data[0]; //传递地址 $timeStamp = $data[1]; //时间戳 $loginCode = $data[2]; //登录code $userName = $data[3]; //用户名 $userPwd = $data[4]; //密码 $loginType = $data[5]; //登录码1001 $link = "timeStamp=".$timeStamp."&loginCode=".$loginCode."&userName=".$userName."&userPwd=".$userPwd."&loginType=".$loginType; //拼接url后缀 $link_length = strlen($link); $options = array( 'http' => array( 'method'=>'POST', 'header'=> "Content-type: application/x-www-form-urlencoded\r\n" . "Content-length: $link_length\r\n", 'content' => $link ) ); $res = file_get_contents($url,false,stream_context_create($options));//post提交,此处打印返回的是loginSuccess登录成功 ``` ```php //以下是使用curl提交,依然无效 $data = explode('^', $frame->data); //获取客户端传递的用户信息字符串,并拆分成数组 $url = $data[0]; //传递地址 $timeStamp = $data[1]; //时间戳 $loginCode = $data[2]; //登录code $userName = $data[3]; //用户名 $userPwd = $data[4]; //密码 $loginType = $data[5]; //登录码1001 $link = "timeStamp=".$timeStamp."&loginCode=".$loginCode."&userName=".$userName."&userPwd=".$userPwd."&loginType=".$loginType; //拼接url后缀 $ch = curl_init();//初始化curl curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页 curl_setopt($ch, CURLOPT_HEADER, 0);//设置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $link); $res = curl_exec($ch);//运行curl curl_close($ch); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 我希望使用socket提交并登录成功后 用户点击自己的用户名可以正常跳转到后台并跳过登录操作,实际上返回登录成功却依然需要输入用户名密码进行登录后台
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
还没有评论!
微信公众号
热门内容
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。