首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend Oauth和在mySQL数据库中写入访问令牌的问题

Zend Oauth和在mySQL数据库中写入访问令牌的问题
EN

Stack Overflow用户
提问于 2010-08-27 16:21:44
回答 1查看 1.1K关注 0票数 1

我使用Zend Oauth将我的应用程序连接到Twitter,如下所述:http://framework.zend.com/manual/en/zend.oauth.introduction.html

它可以很好地保存会话中的Twitter请求令牌和Twitter访问令牌,使用序列化和反序列化,如下所示(缩写):

代码语言:javascript
复制
1: $consumer = new Zend_Oauth_Consumer($config);
2: $token = $consumer->getRequestToken();
3: $_SESSION['TWITTER_REQUEST_TOKEN'] = serialize($token); //write Request Token

...and...

代码语言:javascript
复制
4: $consumer = new Zend_Oauth_Consumer($config);
5: $token = $consumer->getAccessToken($_GET,
unserialize($_SESSION['TWITTER_REQUEST_TOKEN']));
6: $_SESSION['TWITTER_ACCESS_TOKEN'] = serialize($token); //write Access Token

...and...

代码语言:javascript
复制
7: $token = unserialize($_SESSION['TWITTER_ACCESS_TOKEN']);
8: $client = $token->getHttpClient($configuration);

现在,我希望在第6行之后将访问令牌保存在我的mySQL数据库中。问题是,只要我这样做,db中的条目就包含如下奇怪的字符:

代码语言:javascript
复制
O:23:"Zend_Oauth_Token_Access"?:{s:10:"�*�_params";a:4:{s:11:"oauth_token";s:50:"64658798-xOvsSyC83P2lhZRVvvaQLQddaifKO2qmN2KL91eaI";s:18:"oauth_token_secret";s:42:"R4nBLeWhNRXleKsN6H3crubYd2FEmfHFRtLbEh8gos";s:7:"user_id";s:8:"64658798";s:11:"screen_name";s:13:"MyTwitterAccount";}}

这导致第7行中的通知( 280字节的偏移量30处的错误)和第8行上的致命错误,因为$token是非对象。所以我试着找出这个错误,并已经在Zend论坛上发布了这个问题,但没有人能帮助我……我最好的猜测是这是一个编码错误。数据库和我的所有文档都是用utf-8正确编码的,我以前从来没有遇到过这样的问题……第3行中的var_dump($token)告诉我那里已经有了加密字符。下面是一段摘录:

代码语言:javascript
复制
"Accept-Encoding" ["Content-encoding"]=>  string(4) "gzip" ["Content-length"]=>  string(3) "146" ["Connection"]=>  string(5) "close" } ["body":protected]=>  string(146) "�������E˹� ��п��J;80���4(,9��� ��.M��ؖ�"K���H���Q��a|;W����d2��.�׸Je�-���-y.���3��〺  object(Zend_Oauth_Http_Utility)#89 (0)

内容编码gzip有问题吗?或者问题是由Zend和getRequestToken()方法引起的?任何帮助都是非常感谢的。提前感谢

EN

回答 1

Stack Overflow用户

发布于 2010-09-28 04:05:58

取自关于序列化的php.net帮助

有线字符是在序列化受保护和私有变量时添加的,它是一个空字节

如果序列化要存储到postgresql数据库中的对象,则为私有和受保护成员注入的“空字节”会向系统抛出一个扳手。即使对该值执行pg_escape_bytea(),并将该值存储为二进制类型,在某些情况下也会失败。

对于一个肮脏的工作:

$serialized_object =序列化($my_object);$safe_object = str_replace("\0","NULL_BYTE",$serialized_object);

?>

这也允许您以可读的文本格式存储对象。回读数据时:

$serialized_object = str_replace("NULL_BYTE","\0",$safe_object);$my_object =取消序列化($serialized_object);

?>

这个方法唯一的问题是,如果您的对象成员名称或值可能以某种方式包含奇怪的"NULL_BYTE“字符串。如果是这样,那么将str_replace()赋给一个字符串,保证在serialize()返回的字符串中不会有任何其他地方。还要记住在调用unserialize()之前定义类。

如果您要将会话数据存储到postgresql数据库中,那么这个变通方法绝对是必须的,因为传递给会话写函数的$data已经序列化了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3582424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档