导致问题的原因是 getUserInfo 放在了 wx.login 之前。 getUserInfo 获取到 iv 和 encryptedData 传给后台。wx.login调用时用户的 session_key 可能会被更新而致使旧 session_key 失效。这样后台再去解密的时候就等于在用新的 session_key 去解密旧的 session_key 加密的数据,就会报 ILLEGAL_BUFFER 错误。
正常的流程应该是:
很容易错写成在 wx.getUserInfo 的回调里再调 wx.login 拿 code 再发送给服务器,这样 getUserInfo 里的 data 加密用的session_key就有可能跟解密的时候的 session_key 不一致,因为 wx.login 有可能会刷新了 session_key
建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。
环境:
客户端:cocos creator + socket-io + protobufjs
服务器:nodejs + socked-io + protobufjs
protobujs使用的是生成好的静态js文件
问题:
今天在测试的时候发现客户端发给服务器的buffer数据后,服务器解析过程出错,总提示“Error: illegal buffer at *** create_typed_array”这种类似问题,同样的服务器发给客户端,客户端解析时也会提示。
一开始不知道怎么回事,就一顿度娘和谷歌,也没查到怎么回事,偶然发现了一片帖子中提到uint8arry的问题,便回头看了一下提示错误的地方,看了一下源码,如下:
在create_array的时候先判断了Uint8Array是不是undefined的,如果不是,就开始创建。问题就是出现在用buffer创建的地方。
问题就出现在这个我们发给服务器的buffer上,encode的时候buffer中什么样的类型都有,不仅仅是Uint8Array,还会有Uint32Array。
所以想到的解决办法如下(不知道有没有坑):
客户端发服务器:
在encode之后将数据填充到Uint8Array后发给服务器:
接收到服务器的data:
以上方法可以解决buffer解析出错的问题,但是还未应用到实际生产环境中,只是在为小游戏做准备,先暂时这样用着,如有问题再去解决。
还有就是微信小游戏对包体大小限制的很严格,如果用生成好的静态js文件,随着协议越多,js文件就会越大,这个有什么好办法解决呢?(难道是删掉里面的注释?手动滑稽)希望有大神有办法可以赐教!!
if (!FileUpload1.Exists(savePath)){
Response.Write("对不起!文件不存在!!")
return
}
这里的FileUpload1,是不是应该写成File.Exists....,FileUpload1看上去像是控件名称,而对服务器上的文件检查应用的File类。请核实。而FileUpload控件只是用来上传文件的,并不可能对已经存在于服务器上的文件进行访问。
下载代码,可以参考如下:
/// <summary>
/// 下载文件
/// </summary>
/// <param name="path">文件路径</param>
public void downLoad(string path)
{
try
{
string filePath = path
int temp = filePath.LastIndexOf("/") + 1
string fileName = filePath.Substring(temp, filePath.Length - temp)
//FileStream fileStream = new FileStream(Server.MapPath(filePath), FileMode.Open, FileAccess.Read, FileShare.Read)
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)
long fileSize = fileStream.Length
Context.Response.ContentType = "application/octet-stream"
Context.Response.AddHeader("Content-Disposition", "attachmentfilename=\"" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + "\"")
Context.Response.AddHeader("Content-Length", fileSize.ToString())
byte[] fileBuffer = new byte[fileSize]
fileStream.Read(fileBuffer, 0, (int)fileSize)
fileStream.Close()
Context.Response.BinaryWrite(fileBuffer)
Context.Response.End()
}
catch
{
Response.Write("<script>alert('查无此资料或已被删除')</script>")
}
}
你可以参考对比下
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)