Cookie以及用户唯一标识符

Cookie的使用,验证跨应用的Cookie共享情况,以及唯一标识符的思考

2016-03-30 | 阅读

Cookie是一小段文本信息,客户端请求服务器,服务器如果需要记录用户状态,就为客户端浏览器颁发一个Cookie,客户端会把Cookie保存,并在再次请求该网站时,将Cookie一同提交给服务器.服务器可以通过Cookie辨别用户,同时根据需要修改Cookie内容.

每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给

document.cookie: 
document.cookie="userId=828"; 

如果要一次存储多个名/值对,可以使用分号加空格(; )隔开,例如:

document.cookie="userId=828; userName=hulk"; 

防止中文乱码:

document.cookie="str="+escape("I love ajax"); 
// 即
document.cookie="str=I%20love%20ajax"; 

iOS中的Cookie

safari完整的实现了Cookie的功能,但是UIWebview没有,其能有Cookie,但是在应用关闭时,Cookie就会被释放,如同LocalStorage一样.UIWebview的Cookie显然就是本地的了,不与safari共享,但是与应用中的HttpRequest共享会话.

在iOS8中提供了新的WXWebview,可以通过WKWebsiteDataStore来实现本地持久化的cookie和缓存数据.但是我们现在的兼容性还是iOS7.

iOS剪切板

通过剪切板,可以在应用程序之中及应用程序之间实现数据的共享.自身实现了复制粘贴功能的三个控件为 UITextView UITextField UIWebview .提供剪贴板的功能有:

  • UIPasteboard : 我们可以向其中写入数据,也可以读取数据
  • UIMenuController : 显示一个快捷菜单,用于复制 剪贴 粘贴的项
  • UIResponder中的canPerformAction:withSender用于控制哪些命令显示在快捷菜单中.
  • 当快捷菜单上的命令点击的时候,UIReponderStandardEditActions将会被调用.

可以放入剪贴板中的项有:

  • UIPasteboardTypeListString - 字符串数组,内容为kUTTypeUTF8PlainText
  • UIPasteboardTypeListURL - URL数组,包含kUTTypeURL.
  • UIPasteboardTypeListImage - 图形数组,包含kUTTypePNGkUTTypeJPEG.
  • UIPasteboardTypeListColor - 颜色数组.

剪贴板的类型分两种:

  • 系统级: 使用UIPasteboardNameGeneralUIPasteboardNameFind创建,系统级的剪贴板,当应用程序关闭,或者卸载时,数据都不会丢失.
  • 应用程序级: 通过设置,可以让数据在应用程序关闭后,仍然保存在剪贴板中,但是应用卸载后,数据就会消失,通过pasteboardWithName:create:来创建.

跨应用共享一个唯一标识符,通过这个剪贴板来传递udid,可以参考OpenUdid的做法

同公司的应用也可以通过keychain来传递数据.

对于iOS的设备ID设计

如果是一个公司内多个应用共享一个ID,可以使用 keychain来保存数据。

如果是共享给其他APP一起使用的ID,可以使用系统级的UIPasteboard来实现存储与共享。

APP内可以做到实现一个唯一持久保存的ID,但是跨浏览器暂时在iOS上是难以实现的。