| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- # -*- coding: utf-8 -*-
- """按 ThinkPHP File 缓存格式写入一个测试登录态,验证 Java 拦截器能正确读取。
- PHP serialize 字符串长度按 UTF-8 字节计,这里用通用序列化函数自动计算,避免手写长度出错。
- """
- import hashlib
- import os
- from _root import ROOT
- # 默认写 Java 侧缓存目录;设置 YOSHOP_CACHE 可额外写入其它目录(如本地 PHP 站点的 runtime/cache)
- CACHE = os.environ.get(
- "YOSHOP_CACHE",
- str(ROOT / "runtime/cache"))
- def php_serialize(v):
- if v is None:
- return "N;"
- if isinstance(v, bool):
- return "b:" + ("1" if v else "0") + ";"
- if isinstance(v, int):
- return "i:%d;" % v
- if isinstance(v, float):
- return "d:%r;" % v
- if isinstance(v, str):
- return 's:%d:"%s";' % (len(v.encode("utf-8")), v)
- if isinstance(v, dict):
- out = "a:%d:{" % len(v)
- for k, val in v.items():
- out += php_serialize(k) + php_serialize(val)
- return out + "}"
- if isinstance(v, (list, tuple)):
- out = "a:%d:{" % len(v)
- for i, val in enumerate(v):
- out += "i:%d;" % i + php_serialize(val)
- return out + "}"
- raise TypeError(type(v))
- user = {
- "store_user_id": 10001,
- "user_name": "admin",
- "password": "$2y$10$57o000000000000000000000000000000000000000000000000", # 占位,仅用于读取测试
- "real_name": "系统管理员",
- "is_super": 1,
- "is_delete": 0,
- "sort": 100,
- "store_id": 10001,
- "create_time": 1614556800,
- }
- cache_value = {"user": user, "store_id": 10001, "is_login": True}
- token = "testsession123"
- name = hashlib.md5(token.encode()).hexdigest()
- path = os.path.join(CACHE, name[:2], name[2:] + ".php")
- os.makedirs(os.path.dirname(path), exist_ok=True)
- header = "<?php\n//" + format(2099999999, "012d") + "\n exit();?>\n"
- assert len(header.encode()) == 32, len(header.encode())
- payload = php_serialize(cache_value)
- with open(path, "w", encoding="utf-8", newline="") as f:
- f.write(header + payload)
- print("token :", token)
- print("file :", path)
- print("header:", len(header.encode()), "bytes | payload:", len(payload.encode()), "bytes")
- print("payload 前 150 字:", payload[:150])
|