gpt4 book ai didi

session - Playframework 2、Websocket 和 session

转载 作者:行者123 更新时间:2023-12-02 10:10:00 25 4
gpt4 key购买 nike

我知道在处理websocket时,我不能使用session。 playframework 2 websocket 聊天示例将用户名添加到 url 中,但是如果我有一个已经登录的用户并且我不想通过 url 传递他的用户名,是否有另一种方法可以从内部获取用户登录凭据Websocket 请求?

这是我迄今为止尝试过的:请求页面,我将从其中连接到套接字:

public static Result index(){
session("username", "mike")
return ok(indexpage.render());
}

这是 Websocket 部分:

public static Websocket<JsonNode> chat(){
System.out.println(session("username"));
....all the websocket stuff
}

我打印出来的所有内容都是空的我做错了什么?

最佳答案

您可以访问 session :

package controllers

import play.api._
import play.api.mvc._
import play.api.libs.iteratee._

object Application extends Controller {
def index = Action {
Ok(views.html.index()).withSession("connected" -> "user@gmail.com")
}

//I used for views.html.index the html markup from http://www.websocket.org/echo.html
def wstest = WebSocket.using[String] { request =>

val in = Iteratee.consume[String]()

val username = request.session.get("connected").getOrElse("missing username")

val out = Enumerator("Hello " + username) //puts Hello user@gmail.com on the screen

(in, out)
}
}

好的,现在介绍 Java( Controller 中的方法):

public static WebSocket<String> chat(){
final Http.Session session = session();
final String name = session("username");//better version

return new WebSocket<String>() {
public void onReady(WebSocket.In<String> in, WebSocket.Out<String> out) {
in.onMessage(new F.Callback<String>() {
public void invoke(String event) {
System.out.println(event);
}
});

in.onClose(new F.Callback0() {
public void invoke() {
System.out.println("Disconnected");
}
});

out.write("Hello " + session.get("username"));
out.write("Hello " + name);
}
};
}

您似乎无法在 WebSocket 创建中直接访问 http 上下文,但您可以将 session 或来自 Cookie 的更好数据存储在常量中,并在 WebSocket 实例创建中使用它。

我上传了一个带有测试的 Java 示例 https://github.com/schleichardt/stackoverflow-answers/tree/so12879547 (它不在主分支上)。

PS:这在 WebSocket 创建中不起作用:

Http.Context.current().session().get("username")

关于session - Playframework 2、Websocket 和 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12879547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com