php socket传递cookie,PHP Websocket在测试中验证用户(传递会话cookie)
我试图测试一个方案,一方面,匿名用户应该立即断开与Websocket连接,另一方面,认证的用户应该留在websocket连接。第一种情况很容易通过使用下面的代码来测试。认证过程不工作。
对于会话存储,我使用Cookie认证结合数据库:Symfony PDO Session Storage.它一切正常,但是当通过使用身份验证测试描述的行为,我不知道如何在测试中验证用户。作为客户端,我使用Pawl asynchronous Websocket client.这看起来如下:
\Ratchet\Client\connect('ws://127.0.0.1:8080')->then(function($conn) {
$conn->on('message', function($msg) use ($conn) {
echo "Received: {$msg}\n";
});
$conn->send('Hello World!');
}, function ($e) {
echo "Could not connect: {$e->getMessage()}\n";
});
我知道作为第三个参数,我可以传递头信息到“连接”的方法,但我找不到一个方法,使客户端连接和cookie在ws握手期间正确传递。我想到了类似:
>通过创建一个authentication token来验证客户端
>我在序列化用户的数据库中的会话表中创建一个新条目
>我将创建的cookie作为第三个参数传递给connect方法
这是我认为会工作的理论,但用户总是在websocket端保持匿名。这里的代码到目前为止的理论:
// ...
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class WebsocketTest extends WebTestCase
{
static $closed;
protected function setUp()
{
self::$closed = null;
}
public function testWebsocketConnection()
{
$loop = Factory::create();
$connector = new Connector($loop);
// This user exists in database user tbl
$symfClient = $this->createSession("testuser@test.com");
$connector('ws://127.0.0.1:80', [], ['Origin' => 'http://127.0.0.1', 'Cookie' =>
$symfClient->getContainer()->get('session')->getName() . '='
. $symfClient->getContainer()->get('session')->getId()])
->then(function(WebSocket $conn) use($loop){
$conn->on('close', function($code = null, $reason = null) use($loop) {
self::$closed = true;
$loop->stop();
});
self::$closed = false;
}, function(\Exception $e) use ($loop) {
$this->fail("Websocket connection failed");
$loop->stop();
});
$loop->run();
// Check, that user stayed logged
$this->assertFalse(self::$closed);
}
private function createSession($email)
{
$client = static::createClient();
$container = $client->getContainer();
$session = $container->get('session');
$session->set('logged', true);
$userManager = $container->get('fos_user.user_manager');
$em = $container->get('doctrine.orm.entity_manager');
$loginManager = $container->get('fos_user.security.login_manager');
$firewallName = 'main';
$user = $userManager->findUserByEmail($email);
$loginManager->loginUser($firewallName, $user);
// save the login token into the session and put it in a cookie
$container->get('session')->set('_security_' . $firewallName,
serialize($container->get('security.token_storage')->getToken()));
$container->get('session')->save();
$client->getCookieJar()->set(new Cookie($session->getName(), $session->getId()));
// Create session in database
$pdo = new PDOSessionStorage();
$pdo->setSessId($session->getId());
$pdo->setSessTime(time());
$pdo->setSessData(serialize($container->get('security.token_storage')->getToken()));
$pdo->setSessLifetime(1440);
$em->persist($pdo);
$em->flush();
return $client;
}
}
作为config_test.yml,我配置会话以下方式:
session:
storage_id: session.storage.mock_file
handler_id: session.handler.pdo
对于服务器端websocket实现,我使用的是Ratchet,它被下面的Symfony包包装:Gos Websocket Bundle
如何在测试websockets时验证用户?在websocket服务器上,用户总是像“anon-15468850625756b3b424c94871115670”,但是当我手动测试时,他连接正确。
附加问题(次要):如何测试对主题的订阅? (pubsub)
在互联网上没有博客条目或任何其他内容。
更新:没有人从功能测试他们的websockets?这是不重要的,无用的,或为什么任何人都不能帮助这个重要的话题?
php socket传递cookie,PHP Websocket在测试中验证用户(传递会话cookie)相关推荐
- java值传递和引用传递_辨析Java方法参数中的值传递和引用传递
小方法大门道 小瓜瓜作为一个Java初学者,今天跟我说她想通过一个Java方法,将外部变量通过参数传递到方法中去,进行逻辑处理,方法执行完毕之后,再对修改过的变量进行判断处理,代码如下所示. publ ...
- 计算机向用户传递计算 处理结果的设备,计算机向用户传递计算、处理结果的设备是()...
摘要: 通过资料查阅有关文献,计算机向计算结果息的估信取评以获方法是_.自行车B.客,传递处理某一行人指在过道交通单位点或断面的()的内通一地量是路某时间数量,行人货车客.计算机向计算结果标题写可下( ...
- 一文彻底搞懂Java中的值传递和引用传递!
关于Java中方法间的参数传递到底是怎样的.为什么很多人说Java只有值传递等问题,一直困惑着很多人,甚至我在面试的时候问过很多有丰富经验的开发者,他们也很难解释的很清楚. 我很久也写过一篇文章,我当 ...
- 什么是 cookie? 会话 cookie 与持久性 cookie 之间 有何区别?
转载: https://www.cisco.com/c/en/us/products/collateral/security/web-security-appliance/cn/117925-tech ...
- 【小白入门】Socket和webSocket入门 这一篇就够了!用php的Socket自己实现简单webSocket服务器!
这几天研究了下php实现webSocket的方法,网上查了不少博文,涉及到的知识点不少.但却非常值得学,因为这方面典型的应用场景非常的多,消息推送,聊天室,所有需要长连接的地方都会用到它. ...
- HTML用cookie实现自动登录,用cookie实现websocket自动登录,session状态保留。
原标题:用cookie实现websocket自动登录,session状态保留. 会话状态的保留,即登录状态保持,是很常见.很常用的功能. 本文将介绍,在NodeJS开发中,如何实现websocket连 ...
- websocket 客户端测试工具
一个简单的 websocket 客户端测试工具(html页面) 基于自定义的 websocket 协议,后端服务是一个基于Netty的websocket Server <!DOCTYPE htm ...
- 告别手动输入验证码!Web自动化测试带你解锁验证码处理和Cookie机制,跨越测试瓶颈!
Web自动化之验证码处理及cookie机制 在Web自动化测试中,验证码的处理一直是一个难点.如果没有自动化处理方式,手动输入验证码将会非常耗时且容易出错.本文将为大家介绍如何通过Python实现验证 ...
- 自制小工具-在线webSocket连接测试工具
使用场景 最近在进行websocket开发的时候,没有找到一个趁手的在线WS和WSS连接测试工具,这使我十分的苦恼,所以特此开发一个简单的小工具,特此在这分享给大家. 工具地址 webSocket工具 ...
最新文章
- socket编程:多路复用I/O服务端客户端之poll
- 设计模式----组合模式UML和实现代码
- Tfs 2010使用小技巧
- 简明机器学习教程——实践篇(一):从感知机入手
- 新趋势:数据驱动的销售
- 使用 ref 对已渲染到页面的节点进行标记
- 老板想okr,员工想kpi
- idea报“Usage of API documented as @since 1.7”这一问题的解决方法
- 苹果机的时间格式转换为时间搓
- 中文乱码翻译器在线翻译_如何将芬兰语翻译成中文?这两种方法你得会
- cocos2d 帧序列动画
- EDA技术实用教程 | 复习十四 | Quartus II工具的使用
- 基于MemFireCloud的电子图书馆开发指南(三)
- python柱形图绘制_Python绘图之柱形图绘制详解
- 深度学习图片分类增强数据集的方法汇总
- IIS 配置网站出现500内部服务器错误,显示具体错误信息
- 插上网线进入转发状态需要等30s,是什么问题?-网络热门问题分析
- 领导管理团队的3个正确方法
- AI制药 - PDB序列与标准序列的差异
- 人生思考--碌碌无为的一天
热门文章
- TypeScript Parameter Destructuring 语法 - 参数解构
- Angular 项目 tsconfig.json 里定义的 out-tsc 还有作用吗?
- 关于SAP ABAP字符变量和字符串变量字符个数的一个知识点,和一个血案
- Organization model change - product line item EC
- What does SAP UI5 bindItem occurs
- Fiori 里周期性检查window size大小的变化
- smart filter无法从smart business应用获得值的问题分析
- Fiori里花瓣的动画效果实现原理
- ABAP enablement in Sublime Text
- SAP Fiori Launchpad上的错误消息 - User Parameter /UI2/WD_TRKORR_CUST is not maintained