小编Mik*_*ike的帖子

Server-Sent Events究竟是如何工作的?

我正试图进入网络推送技术,所以我开始环顾四周.我基本上找到了2种技术,即Websockets和SSE.由于缺乏perl支持而排除Websockets后,我想尝试更原生的SSE方法.

现在,试图让SSE工作是一个真正的痛苦.每个文档都有相互矛盾的信息,似乎没有就SSE如何工作达成一致意见.有人说你需要一个<event-listen src="events.pm">标签,其他人说你只需要一个EventSourceJS对象.即使使用EventSource对象,我发现了大约4种可能的实现,但它们似乎都不起作用.

这就是我所拥有的.我有一个events.pm,使用mod-perl.如果您调用该文件,则返回data: I haz a websocket.这是与内容类型一起发送的application/x-dom-event-stream.

HTML和JS文件经常被重写,我已经放弃了不同的实现.你们能告诉我一个有效的例子吗?

另外:我不明白你如何向客户发送特定的消息.发送预定义的消息似乎没问题.但是,如果我想象某人向我发送消息的情况,我不明白这些信息("有一条新消息给你")是如何传输到需要该信息的确切浏览器的.我发现的每篇文章都充其量是模糊的.

编辑

基本上,我需要的是一种方式来说'嘿,你被允许得到这个通知吗?首先告诉我你的身份/会话/令牌!' 在每个连接的客户端.我想知道SSE是否可能.

javascript perl server-sent-events

13
推荐指数
2
解决办法
9912
查看次数

JavaScript:更改embed-tag的src属性

我有以下场景.

我向用户显示服务器的一些音频文件.用户单击一个,然后最终使用所选文件夹和文件执行onFileSelected.该函数的作用是更改嵌入对象的源.所以在某种程度上,它是在接受它之前预览所选文件并保存用户的选择.视觉辅助.

HTML

<embed src="/resources/audio/_webbook_0001/embed_test.mp3" type="audio/mpeg" id="audio_file">
Run Code Online (Sandbox Code Playgroud)

JavaScript的

function onFileSelected(file, directory) {
   jQuery('embed#audio_file').attr('src', '/resources/audio/'+directory+'/'+file);
};
Run Code Online (Sandbox Code Playgroud)

现在,这在Firefox中运行良好,但Safari和Chrome只是拒绝更改源,无论操作系统如何.

jQuery找到对象(jQuery.size()返回1),它执行代码,但HTML代码没有变化.

为什么Safari阻止我更改<embed>源代码,我该如何规避这个?

jquery html5 embedded-resource

10
推荐指数
2
解决办法
3万
查看次数

这个Perl代码如何从数组中选择两个不同的元素?

我从一个人那里继承了一些代码,他们最喜欢的时间是将每一行缩短到绝对最小值(有时只是为了让它看起来很酷).他的代码很难理解,但我设法理解(并重写)其中的大部分内容.

现在我偶然发现了一段代码,无论我怎么努力,我都无法理解.

my @heads = grep {s/\.txt$//} OSA::Fast::IO::Ls->ls($SysKey,'fo','osr/tiparlo',qr{^\d+\.txt$}) || ();
my @selected_heads = ();
for my $i (0..1) {
   $selected_heads[$i] = int rand scalar @heads;
   for my $j (0..@heads-1) {
      last if (!grep $j eq $_, @selected_heads[0..$i-1]);
      $selected_heads[$i] = ($selected_heads[$i] + 1) % @heads; #WTF?
   }
   my $head_nr = sprintf "%04d", $i;
   OSA::Fast::IO::Cp->cp($SysKey,'',"osr/tiparlo/$heads[$selected_heads[$i]].txt","$recdir/heads/$head_nr.txt");
   OSA::Fast::IO::Cp->cp($SysKey,'',"osr/tiparlo/$heads[$selected_heads[$i]].cache","$recdir/heads/$head_nr.cache");
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这应该是某种随机函数,但我从未见过更复杂的方法来实现随机性.或者我的假设是错误的?至少,这就是这段代码应该做的事情.选择2个随机文件并复制它们.

===注意===

OSA框架是我们自己的框架.它们以UNIX对应方式命名,并进行一些基本测试,以便应用程序不需要为此烦恼.

perl

8
推荐指数
1
解决办法
571
查看次数

PHP会话的cookie是否安全?

我正在努力确保我的会议安全.在进行一些研究时,我估计基于Agent和IP的PHP的PHPSESSID +随机哈希足以防止劫持.你能做什么呢,真的.

我正在使用HTTPS进行登录.据我所知,来自PHP的会话数据永远不会发送给用户,而是存储在服务器端.客户端仅获取会话的ID.会话数据保存实际的webapp用户会话,而后者又用于检查登录是否有效.一切都很好,花花公子.

但是,有一个我在任何地方都找不到的细节.我想知道如果我使用HTTPS,包含PHP会话ID的cookie是否会自动标记为安全.我做了一些谷歌搜索,但似乎从来没有得到正确的搜索字符串,因为我只找到手动发送cookie的方法.我想知道,因为如果该cookie被发送为明文,它将通过中间人来破坏一些安全性.

编辑1

这是@ircmaxell的补充

我尝试了你的方法,但当我从HTTPS切换回HTTP时,我仍然得到了cookie.它的工作方式如下.只要服务器知道用户会话可用,它就会设置安全标志.这意味着整个站点在您登录后立即在SSL上运行,并且在您不使用SSL时拒绝放弃/使用cookie.或者至少,这就是想法.

if ($SysKey['user']['session_id'] != '') {
   session_set_cookie_params(60*60*24*7, '/', $SysKey['server']['site'], true, true);
}
Run Code Online (Sandbox Code Playgroud)

我假设我需要重新生成id,因为浏览器在登录前已经有了cookie,但由于我只能在几个小时内试用它,我会在尝试之前尝试

解决方案说明

我刚刚发现你必须在开始会话之前设置这些设置.那是我的问题.我现在使用2个不同的cookie.一个用于通过http发送的常规访客,另一个用于仅通过ssl发送的登录用户.

php security cookies ssl session

7
推荐指数
2
解决办法
6889
查看次数

为什么对Unicode字符的Perl字符串操作会给字符串添加垃圾?

Perl的:

$string =~ s/[áàâã]/a/gi; #This line always prepends an "a"
$string =~ s/[éèêë]/e/gi;
$string =~ s/[úùûü]/u/gi;
Run Code Online (Sandbox Code Playgroud)

这个正则表达式应该将"été"转换为"ete".相反,它将它转换为"aetae".换句话说,它为每个匹配元素添加"a".甚至"à"也会转换为"aa".

如果我将第一行更改为此

$string =~ s/(á|à|â|ã)/a/gi;
Run Code Online (Sandbox Code Playgroud)

它有效,但是......现在它预先设置了e每个匹配的元素(比如"eetee").

即使我找到了合适的解决方案,为什么它会这样做?

编辑1:

我添加了"use utf8;",但它没有改变行为(尽管它在JavaScript/AJAX中打破了我的输出).

EDIT2:

Stream源自jQuery执行的Ajax请求.它起源的网站设置为UTF-8.

我正在使用Perl v5.10(perl -v返回"这是perl,为i586-linux-thread-multi构建的v5.10.0").

regex unicode perl internationalization

4
推荐指数
4
解决办法
6633
查看次数

为什么我的mod_perl应用程序中的UTF8数据仍然在Web浏览器中出现乱码?

在开始之前,我想强调一下我正在使用的结构.

  1. 有一个文本文件,从中可以获取特定文本.该文件以utf-8编码
  2. Perl获取文件并将其打印到页面中.一切都按照应有的方式显示.Perl设置为使用utf-8
  3. Perl生成的网页具有以下标题<meta content="text/html;charset=utf-8" http-equiv="content-type"/>.因此它是utf-8
  4. 第一次加载后,所有内容都通过jQuery/AJAX动态加载.翻阅页面,可以加载完全相同的文本,只有这一次它是由JavaScript加载的.请求具有以下标题Content-Type: application/x-www-form-urlencoded; charset=UTF-8
  5. 在后端处理AJAX请求的Perl处理程序以utf-8提供内容
  6. AJAX Handler在我们的自定义框架中调用一个函数.在框架打印出文本之前,它会正确显示为"üöä".在被发送到AJAX处理程序之后,它显示为"x {c3}\x {b6}\x {c3}\x {a4}\x {c}}\x {bc}"这是"utf-8表示" UOA".
  7. 在AJAX Handler将其包作为JSON提供给客户端之后,网页将打印以下内容:"Ãäü".
  8. JS和Perl文件本身保存在utf-8中(Eclipse中的默认设置)

这些是症状.我尝试了谷歌告诉我的一切,但我仍然遇到了问题.有没有人知道它可能是什么?如果您需要任何特定的代码段,请告诉我,我会尝试粘贴它.

编辑1

来自AJAX处理程序的响应标头

Date: Mon, 09 Nov 2009 11:40:27 GMT
Server: Apache/2.2.10 (Linux/SUSE)
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset="utf-8"

200 OK
Run Code Online (Sandbox Code Playgroud)

回答

在你们和这个页面的帮助下,我能够找到问题所在.似乎问题不是编码本身,而是Perl将我的变量$ text编码为utf-8两次(根据网站).解决方案就像添加Encode :: decode_utf8()一样简单.

我一直在寻找完全错误的地方.我感谢所有帮助我在正确的地方搜索的人:)

#spreads一些upvote love#

javascript perl encoding utf-8

4
推荐指数
1
解决办法
1255
查看次数

为什么Perl会在我的CGI脚本中抱怨"使用未初始化的值"?

我正在清理生产版本的Perl代码,并在Apache错误日志中遇到了一个奇怪的警告.

它说:

[Thu Nov 5 15:19:02 2009] Clouds.pm: Use of uninitialized value $name in substitution (s///) at /home/mike/workspace/olefa/mod-bin/OSA/Clouds.pm line 404.

相关代码在这里:

my $name         = shift @_;
my $name_options = shift @_;

$name_options = $name_options eq 'unique'     ? 'u'
              : $name_options eq 'overwrite'  ? 'o'
              : $name_options eq 'enumerate'  ? 'e'
              : $name_options =~ m/^(?:u|o|e)$/ ? $name_options
              : q();

if ($name_options ne 'e') {
   $name =~ s/ /_/g;
}
Run Code Online (Sandbox Code Playgroud)

那么,为什么未初始化变量的警告明显初始化?

apache variables perl warnings

3
推荐指数
1
解决办法
9809
查看次数

如何在Perl中将XML文档从Latin-1转换为UTF-8?

我们公司希望将我们托管的所有网站从Latin-1转换为UTF-8.经过谷歌搜索后,我们的Perl脚本几乎完成了.现在唯一缺少的是XML文件.

将XML从Latin-1转换为UTF-8的最佳方法是什么?它有用吗?

我问,因为我们不确定它,因为谷歌的大多数条目都解释了如何做到完全相反.有人甚至说utf8可能会导致XML出现问题.你能介绍一下整个XML编码问题吗?

xml perl encoding utf-8 latin1

2
推荐指数
2
解决办法
4574
查看次数

PHP:mysqli的未知MySQL服务器主机

我有以下代码:

$username = 'username';
$password = 'password';
$host = 'localhost';
$db = 'dbname';
$dbh = new mysqli('p:'.$host, $username, $password, $db) 
    or die('no connection to server');
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误

PHP Warning:  mysqli::mysqli() [<a href='function.mysqli-mysqli'>function.mysqli-mysqli</a>]: (HY000/2005): Unknown MySQL server host 'p:localhost' (1) in /var/www/vhosts/politiker.lu/httpdocs/includes/sql.php on line 8
Run Code Online (Sandbox Code Playgroud)

这引起了我的兴趣,因为完全相同的代码适用于我的开发环境.既然我想在我的生产服务器上设置它,它就不起作用了.有任何想法吗?

注意:我对服务器不是很好,所以请原谅我,如果错误应该是微不足道的.

编辑1

以下是版本:开发PHP(5.3.3-1ubuntu9.1)+ MySQL(5.1.49-1ubuntu8.1)
生产PHP(5.2.4-2ubuntu5.12)+ MySQL(5.0.51a)

php mysql mysqli

1
推荐指数
1
解决办法
1万
查看次数