如何在浏览器之间传递会话?

How to pass session between browsers?

我用 Laravel 创建了一个网站。我正在尝试将网站投射到 chromecast 设备上,作为电视上的永久显示。我用这个 url cast receiver 来实现这个。问题是我的网站需要身份验证,所以当我发送 iframe 时,chromecast 内部浏览器会加载该网站,但它会卡在登录页面上。而且由于我无法控制预览显示,所以我无法在那里登录。

有没有办法将登录会话从 phone 传递到 chromecast 中的已发送站点?

我正在考虑创建一些临时会话 ID,存储在用户 table 的数据库中,如果此会话 ID 存在于 URL 中,PHP 将创建已记录的处于用户状态。我知道这可能有一些安全问题,但我想不出其他方法来解决 chromecast 的这个问题。

任何其他想法将不胜感激。

注意:镜像设备并不理想,因为phone需要显示器一直开着才能镜像,这是不可行的。我希望人们在不打开 phone 显示屏的情况下投射网站。

Laravel 允许您轻松创建 "signed" URL 到命名路由。这些 URL 有一个 "signature" 哈希附加到查询字符串,允许 Laravel 验证 URL 自创建以来未被修改。带符号的 URL 对于可公开访问但需要一层保护以防止 URL 操纵的路由特别有用。

例如,您可以使用已签名的URL登录用户数据。要创建到命名路由的签名 URL,请使用 URL 门面的 signedRoute 方法:

use Illuminate\Support\Facades\URL;

return URL::signedRoute('chromecastLogin', ['user' => 1]);

如果您想生成一个过期的临时签名路由URL,您可以使用temporarySignedRoute方法:

return URL::temporarySignedRoute(
    'chromecastLogin', now()->addMinutes(60), ['user' => 1]
);

验证签名的路由请求

要验证传入请求是否具有有效签名,您应该对传入的 Request:

调用 hasValidSignature 方法
use Illuminate\Http\Request;

Route::get('/chromecastLogin/{user}', function (Request $request) {
    if (! $request->hasValidSignature()) {
        abort(401);
    }

    // login the user
})->name('chromecastLogin');