我目前正在使用/测试NGINX反向代理设置中的微缓存功能,以获取动态内容。
发生的一个大问题是需要忽略的会话/ Cookie,否则人们将使用该站点上的随机帐户进行登录。
目前,我忽略了这样的流行CMS Cookie:
if ($http_cookie ~* "(joomla_[a-zA-Z0-9_]+|userID|wordpress_(?!test_)[a-zA-Z0-9_]+|wp-postpass|wordpress_logged_in_[a-zA-Z0-9]+|comment_author_[a-zA-Z0-9_]+|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_[a-zA-Z0-9]+|sid_customer_|sid_admin_|PrestaShop-[a-zA-Z0-9]+") 
    {
# set ignore variable to 1
# later used in:
# proxy_no_cache                 $IGNORE_VARIABLE;
# proxy_cache_bypass             $IGNORE_VARIABLE;
# makes sense ?
    }
Run Code Online (Sandbox Code Playgroud)
但是,如果我想向忽略列表添加更多的cookie,这将成为一个问题。更不用说根据文档,不建议在NGINX中使用太多“ if”语句。
我的问题是,是否可以使用map方法完成此操作?我看到map中的正则表达式是不同的(或者我错了)。
还是有另一种方法可以有效地忽略/绕过cookie?
我在stackoverflow上进行了大量搜索,尽管有很多不同的示例。我找不到适合自己需要的东西。
谢谢
更新:
在互联网上进行了大量的阅读和“挖掘”(我们不妨只说Google),我发现了很多有趣的例子。
但是,我对这些感到非常困惑,因为我不完全了解正则表达式的用法,而且我害怕在不了解正则表达式的情况下实现这种用法。
范例1:
map $http_cookie $cache_uid {
  default nil;
  ~SESS[[:alnum:]]+=(?<session_id>[[:alnum:]]+) $session_id;
}
Run Code Online (Sandbox Code Playgroud)
在这个示例中,我注意到正则表达式与“ if”块中使用的正则表达式有很大不同。我不明白为什么模式开始时没有任何“”并且直接带有〜符号。
我不明白[[:alnum:]] +是什么意思?我搜索此文件,但是找不到文档。(或者我错过了)
我可以看到作者将默认设置为“ nil”,这不适用于我的情况。
范例2:
map $http_cookie $cache_uid {
  default  '';
  ~SESS[[:alnum:]]+=(?<session_id>[[:graph:]]+)  $session_id;
} …Run Code Online (Sandbox Code Playgroud) 我从来没有真正使用过 Powershell,所以我对此很困惑。我的目标是将多个 CSV 合并为 1 个,更具体地说,目前为 3 个。
使用Import-Csv和Foreach-Object我设法实现了这一目标,但是速度超级慢。我发现了这篇文章,所以我尝试了一下。令人难以置信的快速迭代。
不幸的是,我对 Powershell 太笨了,无法理解为什么我不能正确使用Where-ObjectFast,它不会匹配任何东西。
我的代码示例:
Measure-Command {   $CSV1 = Import-CSV -Path .\CSV1.csv }
Measure-Command {   $CSV2 = Import-CSV -Path .\CSV2.csv }
Measure-Command {
Import-Csv -Path .\CSV3.csv | Foreach-ObjectFast {
            $row = $_;
            $match = $CSV1 | Where-ObjectFast -FilterScript {       $_.name -eq $row.'name'     }
            $dbg1 = 'Matched: {0}' -f $match;   Write-Host $dbg1 -foreground Cyan;
   # continued... } }
Run Code Online (Sandbox Code Playgroud)
我基本上需要做的是将 CVS3 中的“名称”与 CSV1 中的“名称”以及需要的其他字段进行匹配,然后对 CSV2 执行相同操作并输出到最终文件。 …
我在我的一个项目中有一个特定的要求,即保持某些操作的“计数”,并最终定期“读取”+“重置”这些计数器(例如24小时)。
操作将是:
我感兴趣的平台是Windows,但是如果这个可以跨平台就更好了。我正在使用 Visual Studio,目标 Windows 架构仅是 x64。
我不确定结果是否“ok”以及我的实施是否正确。坦率地说,我从未使用过太多 std 包装器,而且我的 C++ 知识非常有限。
结果是:
12272 Current: 2
12272 After: 0
12272 Current: 18
12272 After: 0
12272 Current: 20
12272 After: 0
12272 Current: 20
12272 After: 0
12272 Current: 20
12272 After: 0
Run Code Online (Sandbox Code Playgroud)
下面是一个完全复制/粘贴的可重现示例:
12272 Current: 2
12272 After: 0
12272 Current: 18
12272 After: 0
12272 Current: 20
12272 After: 0
12272 Current: 20
12272 …Run Code Online (Sandbox Code Playgroud) 我正在努力了解我是否以正确的方式执行此操作以及这是否是(唯一的)最佳解决方案。
我正在进行的项目是使用三维数组来保存和使用大量数据。“数据”的一部分是 DWORD 类型,我必须进行从/到 DWORD/BYTE 的安全转换。
BYTE(c 风格)数组如下所示:
BYTE array_data[150][5][255] = 
{
    {
        { // bytes },
        { 0x74,0x21,0x54,0x00 }, // This is converted from DWORD like: 0x00542174
        { // bytes },
        { // bytes },
        { // bytes },
    },
};
Run Code Online (Sandbox Code Playgroud)
我发现从 DWORD转换为 BYTE 的(唯一)方法:
DWORD dword_data;
char byte_array[4];
*(DWORD*)byte_array = dword_data; // byte_array becomes {0x74, 0x21, 0x54, 0x00}
wchar_t temp[256];
wsprintfW(temp, L"{0x%02x,0x%02x,0x%02x,0x%02x}, // This is converted from DWORD like: 0x%.8X\n", (BYTE)byte_array[0], (BYTE)byte_array[1], (BYTE)byte_array[2], (BYTE)byte_array[3], …Run Code Online (Sandbox Code Playgroud) 经过大量搜索后,我找到了一个用于跟踪和增加项目构建编号的工具。对于 C/C++ 项目。所有其他的要么已经过时,要么适用于 C#。
我正在使用此博客中的 IncrementBuild-*.exe:http://alax.info/blog/1713
它按预期工作,但我相信我做错了什么,因为在运行此工具后构建后,它出于某种原因添加了另一个 VERSIONINFO 资源。该项目最终有 2 种资源,原始资源和修补后的资源。
没有源代码或 .pdb 来修改/重制/分析它。
有没有人有比这更好的解决方案?
请指教,不胜感激。
c++ ×3
windows ×3
arrays ×1
c ×1
cookies ×1
csv ×1
nginx ×1
nginx-config ×1
powershell ×1
regex ×1