mstsc远程提示“身份验证错误,要求的函数不支持,可能由于CredSSP 加密 Oracle 修正”

如题,远程时提示如图错误“身份验证错误,要求的函数不支持,可能由于CredSSP 加密 Oracle 修正”。

解决方案:

1、Win+R键调出运行窗口,输入gpedit.msc,点击“确定”

2、进入本地组策略编辑器,按文章提示的策略路径找到策略。

策略路径:“计算机配置”->“管理模板”->“系统”->“凭据分配”,

设置名称: 加密 Oracle 修正, 默认状态,未配置,我们点已启用,然后保护级别就可以修改了,里面有三种级别,一定要选择易受攻击才行。

3、修改级别后如果没有生效,请打开cmd窗口,运行update /force更新策略,如果再不行就重启。

在测试中发现被连接的系统如果是win10那不受该策略影响。

小谈国内互联网进程

第一次在头条吧啦吧啦,洋洋洒洒撂下这些文字,还请大佬们担待。(头条搜索:宇哥就是宇哥,感谢支持!)

中国互联网整体进程正逐步从产品研发阶段往商业运营阶段过渡,核心人才职能也在不断转换。
2010-2020年大致是传统企业纷纷布局/转型互联网的进程。(BATJ系互联网企业除外)

截止2018年底各传统行业可接入互联网的,市场都已产生对应的解决方案及系统程序(比如ERP系统,电商系统,App打包,小程序等),而且仍在进一步迭代。也不乏先行的一些企业很早便进入了商业运营阶段(比如出生于2001年的地产链家平台)。在过渡到商业运营阶段前,产品经理、产品运营等新兴岗位不断涌现,研发相关职位细分化也已基本完成(标志着研发阶段已趋于成熟)。

接下来,谁能把传统企业互联网业务运营的风生水起谁将成为传统企业的领跑人。网络推广、网络运营仍然需要大把的优秀人才,而类似岗位或将成为下一个十年的核心人才。

实现梦想无非三件事:先有思想,而后集资源,再而通过资源将思想转成现实。每个阶段每个环节,核心人才都在转换。

把握好自己,把握好未来,让我们见证更好更强的中国互联网形态,祝各位Fighter一切顺利!

用VS Code做PHP开发,解决PHP文件中报错问题

文章参考http://bbs.wfun.com/thread-902655-1-1.html,有作部分修改 。

关于Visual Studio Code,可能有的开发者很陌生,但说起Sublime Text / atom,你可能就知道了,他们属于同类产品,都是开发者日常堆代码的利器。

它是一个轻量级的Web集成开发环境,支持 Linux,Mac 和 Windows!

先来看看知乎里面如何评价 Visual Studio Code? (百度查看更多评测

如果你已经厌烦了Sublime Text,而且无法接受它的收费,那么相信微软出品的 Visual Studio Code 值得你尝试一下,它不仅跨平台,而且支持各种常见开发语言,轻量简洁,功能友好,现在已经可以支持各种插件了,已然非常强大,最主要的是它很流畅,节省资源,颜值很高!

1. 下载并安装 Visual Studio Code:

微软官网:https://code.visualstudio.com/

插件库:https://marketplace.visualstudio.com/#VSCode

2. 在Windows 10环境下安装PHP:

2.1 下载自己中意的PHP版本(我选的是php-5.6.18-nts-Win32-VC11-x64):

http://windows.php.net/download

2.2 将 php-5.6.18-nts-Win32-VC11-x64.zip 解压到C盘根目录,并将php-5.6.18-nts-Win32-VC11-x64文件夹重命名为php,最终php路径如下(注意这个很关键,会影响到后面PHP_CodeSniffer组件的安装):

C:\php\

2.3 设置环境变量,允许执行PHP:
打开高级系统设置(Win+R,然后输入sysdm.cpl打开即可进入,按如下图步骤填入 ” C:\php “)

2.4 检查PHP环境是否正常(Win+R,然后输入CMD运行,然后执行php -h命令),如下:

2.5 重命名 php.ini ,在php根目录会找到以下两个文件:
php.ini-development 开发测试用
php.ini-production 安全性高,适合线上
这里我选择将php.ini-production重命名为php.ini

3. 安装pear库

您也可以另外用composer库,直接看第4步

3.1 下载http://pear.php.net/go-pear.phar

3.2 复制go-pear.phar文件到C:\php目录

3.3 继续运行CMD然后确保已经cd到了C:\php>,执行以下命令:

C:\php> php go-pear.phar

遇到:
Are you installing a system-wide PEAR or a local copy?
(system|local) [system] :
输入local继续(什么都不输直接回车,那么表示默认选择system,但这可能存在权限问题而终止)

后面就是yes,Y,回车,一步步按提示进行下去。

3.4 检查php.ini里面已经配置好,结尾会看到:

include_path=”.;C:\php\pear”

如果是PHP7可能默认已经做了路径指向,因此pear装完后不会有这句代码

3.5 CMD里面执行pear,如果返回以下内容即表示pear安装成功:

4. 安装PHPcs

以下是最关键一步,运行CMD,执行以下命令:

A. pear方式:

pear install PHP_CodeSniffer

B. composer方式:

如果您不想用pear,也可以选择用composer库(确保已经安装好),CMD定位到您的项目根目录下面,然后使用如下命令:

composer require –dev squizlabs/php_codesniffer

5. 安装PHP CodeSniffer for Visual Studio Code插件(英文介绍)

5.1 打开 Visual Studio Code;
5.2 在Windows下面按快捷键 Ctrl+P 或者 Mac下面 Cmd+P 来快捷打开对话框;
5.3 键入 ext install phpc

5.4 直接回车或者点那个云图标来下载和安装此插件;
5.5 重启 Visual Studio Code 就可以享用此强大IDE了。

打开PHP文件如果没有出现以下提示就表示一切正常:

6. 安装PHP调试插件 PHPDebug (英文介绍

6.1 下载PHP组件xdebug
https://xdebug.org/download.php
我这里选的是 PHP 5.6 VC11 (64 bit)

6.2 安装xdebug
下载的php_xdebug-2.4.0rc4-5.6-vc11-nts-x86_64.dll 重命名为php_xdebug.dll之后(非必要),将文件放到C:\php\ext目录里面,然后修改一下php.ini:

6.3 打开Visual Studio Code,按快捷键 Ctrl+P ,然后输入  ext install php 稍等一下就会看到有个phpdebug的插件,点击云图标即可下载并安装。

6.4 重启工具之后打开自己的php项目(注意不是单个文件),按快捷键F5即可进入调试模式,PHP调试的时候注意要确保在PC浏览器里面可以正常访问你的网站,因此您本地要搭建好网站环境,或者用上文第7条提到的 Ctrl+Shinft+B 来运行PHP。

7.这是VS中php运行路径

文件->首选项->设置

在“用户设置”或者“工作区设置”里面添加以下一行代码

"php.validate.executablePath": "C:\\Windows\\php7.2.10\\php.exe",

8.VS Code环境运行php页面

Ctrl+Shift+B,配置task.json,清空后将下列代码覆盖进去

{
    "version": "2.0.0",
    "command": "C:\\Windows\\php\\php.exe",//此处填写你的php.exe路径,注意路径分割符\\
    "args": [
      "-S", "127.0.0.1:8080",
      "-t", "${workspaceRoot}"
    ],
    "problemMatchers": []
}

设置好后,编辑器菜单中点击“终端”->“运行生成任务”,选php,然后浏览器访问 http://127.0.0.1:8080/yourfile.php即可看到页面内容。

搞定!

ERROR: failed to mkdir pear PHP_CodeSniffer CodeSniffer Core File[Solved]

If your PHP installation has been done somewhere else other than the C:\ drive, then “pear install” command may throw errors.

Example: Here in my case, the xampp has been installed into E:\ drive and the “pear install” throws error.

E:\xampp\php>pear install PHP_CodeSniffer
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-upd
ate pear.php.net" to update
downloading PHP_CodeSniffer-2.0.0.tgz ...
Starting to download PHP_CodeSniffer-2.0.0.tgz (448,559 bytes)
................................................................................
..........done: 448,559 bytes
ERROR: failed to mkdir C:\php\pear\tests\PHP_CodeSniffer\CodeSniffer\Core\File

Solution:

I get into the “pear” directory and checked config values set for different pear related directories. All were set to C:\ drive by default. So, we need to change those settings to correct path.

pear config-set doc_dir E:\xampp\php\pear
pear config-set cfg_dir E:\xampp\php\pear
pear config-set data_dir E:\xampp\php\pear
pear config-set test_dir E:\xampp\php\pear
pear config-set www_dir E:\xampp\php\pear
E:\xampp\php>
 
E:\xampp\php>pear config-set doc_dir E:\xampp\php\pear
config-set succeeded
 
E:\xampp\php>pear config-set cfg_dir E:\xampp\php\pear
config-set succeeded
 
E:\xampp\php>pear config-set data_dir E:\xampp\php\pear
config-set succeeded
 
E:\xampp\php>pear config-set test_dir E:\xampp\php\pear
config-set succeeded
 
E:\xampp\php>pear config-set www_dir E:\xampp\php\pear
config-set succeeded
 
E:\xampp\php>pear install PHP_CodeSniffer
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-upd
ate pear.php.net" to update
downloading PHP_CodeSniffer-2.0.0.tgz ...
Starting to download PHP_CodeSniffer-2.0.0.tgz (448,559 bytes)
.............................done: 448,559 bytes
install ok: channel://pear.php.net/PHP_CodeSniffer-2.0.0
 
E:\xampp\php>

Now it works !!?

黄河圣水天上来

每每来西北这块儿宝地,宇哥都会无意识的有模有样的拼起诗句来。

后来在媳妇儿那里得知此地竟为太白故里,遂加以斟酌,意会出此稿。

美不美别嫌弃,权当一份心意,敬李大夫,敬大好河山!

国庆访太白故里
    --byron
黄河源头饮民谣,
硕果园间人儿笑。
浪沙淘淘行也淘,
白云袅袅群山晓。

Vue 加入 withCredentials 后无法进行跨域请求

Vue和django的前后端分离项目,之前通过在django中允许跨域访问实现了跨域请求,但为了使每个请求带上session信息,我设置了withCredentials ,即:

axios.defaults.withCredentials = true
然后跨域请求时会出现如下问题:

Response to preflight request doesn’t pass access control check: The value of the ‘Access-Control-Allow-Origin’ header in the response must not be the wildcard ‘*’ when the request’s credentials mode is ‘include’. Origin ‘http://localhost:8080’ is therefore not allowed access. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

解决方案

Access-Control-Allow-Origin 字段必须指定域名,不能为*

Access-Control-Allow-Credentials为true

main.js中添加拦截器

Vue.http.interceptors.push((request, next) => {

request.credentials = true;

next();
});
2.CORS
同域安全策略CORS(Cross-Origin Resource Sharing)
它要求请求的服务器在响应的报头(Response Header)添加 Access-Control-Allow-Origin标签,从而允许此标签所对应域访问此服务器的资源,调用此服务器的接口。
缺陷:

默认情况下,跨源请求不提供凭据(cookie、HTTP认证及客户端SSL证明等),通过将withCredentials属性设置为true,可以指定某个请求应该发送凭据。如果服务器接收带凭据的请求,会用下面的HTTP头部来响应:
Access-Control-Allow-Credentials: true
1
如果发送的是带凭据的请求,但服务器的相应中没有包含这个头部,那么浏览器就不会把相应交给JavaScript,请求就无法得到结果的数据(浏览器得到了,但是我们请求的方法得不到,因为被浏览器拦截了),因此在需要传Cookie等时,服务端的Access-Control-Allow-Origin必须配置具体的具体的域名。并且还需要设置其他的请求头:

Access-Control-Allow-Origin; //request.getHeader(“Origin”)||www.xxx.com
Access-Control-Allow-Methods; //POST, GET, OPTIONS, DELETE
Access-Control-Allow-Credentials;//是否支持cookie跨域
Access-Control-Allow-Headers;//x-requested-with,content-type
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Headers “Origin, X-Requested-With, Content-Type, Accept”;
add_header Access-Control-Allow-Methods “GET, POST, OPTIONS”;
proxy_set_header
作用:允许重新定义或者添加发往后端服务器的请求头。value可以包含文本、变量或者它们的组合。 当且仅当当前配置级别中没有定义proxy_set_header指令时,会从上面的级别继承配置。 默认情况下,只有两个请求头会被重新定义:
用法:
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用 request.getRemoteAddr()就可以获取到客户端ip,但是当我们使用了nginx作为反向代理后,使用request.getRemoteAddr()获取到的就一直是nginx服务器的ip的地址,那这时应该怎么办?
解决办法: nginx是可以获得用户的真实ip的,也就是说nginx使用$remote_addr变量时获得的是用户的真实ip?
用法:proxy_set_header X-real-ip $remote_addr; #在界面中使用 request.getAttribute(“X-real-ip”)

part2:原理介绍

这里我们将nginx里的相关变量解释一下,通常我们会看到有这样一些配置

server {

listen 88;

server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location /{

root html;

index index.html index.htm;

proxy_pass http://backend;

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-real-ip $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# proxy_set_header X-Forwarded-For $http_x_forwarded_for;

}

我们来一条条的看

1. proxy_set_header X-real-ip $remote_addr;

这句话之前已经解释过,有了这句就可以在web服务器端获得用户的真实ip

但是,实际上要获得用户的真实ip,不是只有这一个方法,下面我们继续看。

2. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

我们先看看这里有个X-Forwarded-For变量,这是一个squid开发的,用于识别通过HTTP代理或负载平衡器原始IP一个连接到Web服务器的客户机地址的非rfc标准,如果有做X-Forwarded-For设置的话,每次经过proxy转发都会有记录,格式就是client1, proxy1, proxy2,以逗号隔开各个地址,由于他是非rfc标准,所以默认是没有的,需要强制添加,在默认情况下经过proxy转发的请求,在后端看来远程地址都是proxy端的ip 。也就是说在默认情况下我们使用request.getAttribute(“X-Forwarded-For”)获取不到用户的ip,如果我们想要通过这个变量获得用户的ip,我们需要自己在nginx添加如下配置:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

意思是增加一个$proxy_add_x_forwarded_for到X-Forwarded-For里去,注意是增加,而不是覆盖,当然由于默认的X-Forwarded-For值是空的,所以我们总感觉X-Forwarded-For的值就等于$proxy_add_x_forwarded_for的值,实际上当你搭建两台nginx在不同的ip上,并且都使用了这段配置,那你会发现在web服务器端通过request.getAttribute(“X-Forwarded-For”)获得的将会是客户端ip和第一台nginx的ip。

那么$proxy_add_x_forwarded_for又是什么?

$proxy_add_x_forwarded_for变量包含客户端请求头中的”X-Forwarded-For”,与$remote_addr两部分,他们之间用逗号分开。

举个例子,有一个web应用,在它之前通过了两个nginx转发,www.linuxidc.com 即用户访问该web通过两台nginx。

在第一台nginx中,使用

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

现在的$proxy_add_x_forwarded_for变量的”X-Forwarded-For”部分是空的,所以只有$remote_addr,而$remote_addr的值是用户的ip,于是赋值以后,X-Forwarded-For变量的值就是用户的真实的ip地址了。

到了第二台nginx,使用

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

现在的$proxy_add_x_forwarded_for变量,X-Forwarded-For部分包含的是用户的真实ip,$remote_addr部分的值是上一台nginx的ip地址,于是通过这个赋值以后现在的X-Forwarded-For的值就变成了“用户的真实ip,第一台nginx的ip”,这样就清楚了吧。

最后我们看到还有一个$http_x_forwarded_for变量,这个变量就是X-Forwarded-For,由于之前我们说了,默认的这个X-Forwarded-For是为空的,所以当我们直接使用proxy_set_header X-Forwarded-For $http_x_forwarded_for时会发现,web服务器端使用request.getAttribute(“X-Forwarded-For”)获得的值是null。如果想要通过request.getAttribute(“X-Forwarded-For”)获得用户ip,就必须先使用proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;这样就可以获得用户真实ip。

proxy_redirect [ default|off|redirect replacement ]
默认值:proxy_redirect default
使用字段:http, server, location
如果需要修改从被代理服务器传来的应答头中的”Location”和”Refresh”字段,可以用这个指令设置。
假设被代理服务器返回Location字段为: http://localhost:8000/two/some/uri/

git仓库认证失败,Authentication failed解决方法。

新建的仓库联接不上,如果不是《远程仓库交互时提示Permission denied (publickey). Could not read from remote repository.》这个问题,那可能是这个提示:

fatal: Authentication failed for 'http.......'

解决方法:

1、设置与目标仓库匹配的用户名和邮箱

git config --global user.name "yourname" 
git config --global user.email "youremail"

2、重置登录验证

git config --system --unset credential.helper

3、重新pull或push

Username for 'http://......': 输入账号
Password for 'http://xxx@......':输入密码

搞定!