latest stable versions: v150827 (changelog)

Old Forums (READ-ONLY): The community now lives at WP Sharks™. If you have an s2Member® Pro question, please use our new Support System.

About: Mary May

Sorry, I've not written a description yet. I'll get to it soon!


Topics I've Started

Viewing 15 topics - 1 through 15 (of 15 total)
Topic Count Last Reply
Double PayPal recurring subscriptions

By:  Mary May in: Community Forum

voices: 2
replies: 1

3 years ago  cassel

multiple checkbox alignment problem

By:  Mary May in: Community Forum

voices: 2
replies: 2

3 years, 6 months ago  Mary May

Other storage clouds: DreamObjects

By:  Mary May in: Community Forum

voices: 2
replies: 2

3 years, 10 months ago  Mary May

Playing protected videos on Apple TV

By:  Mary May in: Community Forum

voices: 2
replies: 2

3 years, 11 months ago  Mary May

iPad video from S3 "Request has expired"

By:  Mary May in: Community Forum

voices: 4
replies: 10

3 years, 12 months ago  Jason (Lead Developer)

Listing banned members

By:  Mary May in: Community Forum

voices: 2
replies: 1

4 years ago  Bruce

Sortable EOT hack breaks RSS

By:  Mary May in: Community Forum

voices: 3
replies: 2

4 years, 2 months ago  Bruce

Mobile hotspot triggers IP Access Restriction

By:  Mary May in: Community Forum

voices: 2
replies: 1

4 years, 2 months ago  Cristián Lávaque

Extracting variables from EOT demotion hook

By:  Mary May in: Community Forum

voices: 3
replies: 3

4 years, 3 months ago  Eduan

EOT event triggering

By:  Mary May in: Community Forum

voices: 2
replies: 2

4 years, 3 months ago  Mary May

Lapsed subscriber tries returning and fails

By:  Mary May in: Community Forum

voices: 2
replies: 3

4 years, 3 months ago  Raam Dev

paypal-pn.log not being updated

By:  Mary May in: Community Forum

voices: 3
replies: 5

4 years, 5 months ago  Raam Dev

Bump all members one level

By:  Mary May in: Community Forum

voices: 2
replies: 3

4 years, 5 months ago  Raam Dev

s2Member & JW Player – Video Stalls

By:  Mary May in: Community Forum

voices: 6
replies: 23

4 years, 5 months ago  Cristián Lávaque

s2member, jw player, iPad, NOT happy together

By:  Mary May in: Community Forum

voices: 2
replies: 7

4 years, 6 months ago  Mary May

Viewing 15 topics - 1 through 15 (of 15 total)

My Latest Replies (From Various Topics)

Viewing 25 replies - 1 through 25 (of 26 total)
Author Replies
Author Replies
Posted: Tuesday Jul 9th, 2013 at 6:18 am #53172
Mary May
Username: marymay

THANKS Bruce!

“hacky” = ” kludgy”
Already had the BRs and tried the NBSP with little satisfaction. The float:left was the missing part of the answer that helped.

Much appreciated!

…and yet another example of why “PLEASE HELP!…” isn’t a good subject line for people who come along later. ;-{

Posted: Friday Mar 8th, 2013 at 3:03 pm #44123
Mary May
Username: marymay

That’s what I suspected.

Thanks

Posted: Monday Jan 14th, 2013 at 8:25 am #37358
Mary May
Username: marymay

THANKS Jason for the quick answer.

Maybe someone else can tell us how AirPlay works … such as, does it make additional requests, etc.

Posted: Friday Jan 11th, 2013 at 8:54 am #36978
Mary May
Username: marymay

Thanks Jason.
You’ve just confirmed what it has taken 8 very frustrating months to deduce. We have a growing number of iPad customers, but most are not technical enough to give very good descriptions of the failures they see … and I am not an iPad owner myself so have not been able to dig very deeply.

It was only a couple of days ago that a random / accidental connection to a person in Cupertino (works in a big building at 1 Infinity Loop) revealed the “AccessDenied Request has Expired” error response that led me to hours of Amazon server log examination and to posting this thread.

Sometime late yesterday, I came across the my_custom_expiration_time filter suggestion elsewhere on your site and implemented it immediately. My new friend in Cupertino confirmed that it relieved the problem.

We’ve assessed the CloudFront possibility and are currently holding back due to stories we’ve heard from others about costs that ran much beyond their expectations, and our budget.

Thanks for the confirmation.

Posted: Friday Jan 11th, 2013 at 8:13 am #36969
Mary May
Username: marymay

Thanks Cristián,
Some additional observations to pass along….

Many of our videos run 20 to 30 minutes long, and amount to 100-150MB file sizes. The 30 second expires= value is certainly OK for establishing a connection with S3, but is not at all useful for iPads which will want to do many, many byte-range requests during the duration of a long playing video. Apparently, each is treated as a new connection … and the (unknown as yet) software component that generates the requests appears to simply copy the existing signature and expires= values … until time runs out.

Thanks for the tip about Philly’s plugin. So far, we’re using only S3 and his plugin also wants CloudFront. Yet, it’s good to know about it.

Posted: Friday Jan 11th, 2013 at 5:56 am #36945
Mary May
Username: marymay

Raam, Cristián, Jason,

Any ideas on this??????

Posted: Thursday Jan 10th, 2013 at 8:06 am #36857
Mary May
Username: marymay

Maybe I need to ask questions about this problem a different way…

Assumptions:
– iPad’s consume videos in multiple segments, via byte-range requests.
– Amazon S3 file service (remember, no CloudFront) expects a signed URL, which s2Member provides.
– s2Member affords another level of protection by time limiting the request using the Expires= header.

Now, how do signatures and expire values get generated after the first request from an iPad?

??? Does JWPlayer generate these subsequent requests? If so, what clock does it use? … the iPad’s clock?

??? Or, are these requests generated by s2Member? (I don’t see them in the server logs.)

Posted: Wednesday Jan 9th, 2013 at 5:45 pm #36810
Mary May
Username: marymay

a little more information for Support Reps

Looking at s3 server logs, I find numerous instances of iPads retrieving blocks within video files … indicated by 206 return codes.

Yet a few result in “403 AccessDenied 321….” return codes … ending a series of requests as a stall.

It seems that videos are working for some but failing for others, and I can’t understand why “Request has expired.”

Where should I look next?

Before you ask … s2member-server-check-120703.php runs clean: No Issues.

Posted: Friday Oct 5th, 2012 at 9:09 am #27573
Mary May
Username: marymay

Thanks Bruce!
Your sample is just what I needed. It’s interesting how much PHP web page work one can do without needing to know much about array handling.

.$user->user_firstname. gave me exactly what I was looking for.

Sure, I agree about the hazards of working with live sites, and for anything that involved actually altering values or database contents I would use a non-production site. Now, that I have enough to work with, I probably will anyway just to be able to force demotions and move things along faster.

Much appreciated!

Posted: Wednesday Sep 26th, 2012 at 6:27 pm #26624
Mary May
Username: marymay

Thanks also for the sortable EOT column. It works for me.

Like Grace, I wondered if something were wrong when I sorted the column and saw nothing. However, most of our members have monthly subscriptions, which have no EOT dates. The one-time-purchases for specific periods DO have EOT dates and those entries get sorted correctly … with most showing up on the last page.

Nice hack. Good to have. Thanks!

Posted: Wednesday Sep 26th, 2012 at 6:10 pm #26621
Mary May
Username: marymay

Thanks Bruce for the information about passed $vars. That helps immensely.

It suggests to me that all the vars mentioned in the normal EOT API Notification email are available.
i.e. eot_del_type, subscr_id, user_first_name, user_last_name, user_full_name, user_email, etc.

Posted: Tuesday Sep 25th, 2012 at 8:15 am #26422
Mary May
Username: marymay

THANKS for that article Bruce! It is very helpful

Similar, but different, I’m wanting to implement a hack that is triggered by “ws_plugin__s2member_during_auto_eot_system_during_demote”. The codex suggests starting with:

add_action("ws_plugin__s2member_during_auto_eot_system_during_demote", "my_eot_hook_function");
function my_eot_hook_function($vars = array())

I have not been able to find a specific set of information. Maybe I haven’t looked in the right place? Other than a trial and error approach (waiting for someone to fall into EOT, then iterate…), where can I find out exactly what is passed in the $vars array? Is it associative or indexed? What keys might it have? etc.? I can eventually understand through stepwise revelation, but would prefer accurate documentation.

Posted: Tuesday Sep 18th, 2012 at 8:47 am #25693
Mary May
Username: marymay

Thanks Raam.

Posted: Monday Sep 17th, 2012 at 6:56 am #25552
Mary May
Username: marymay

ME TOO!

We’re also interested in that hack and KB article. Soon?

Thanks,

Posted: Thursday Sep 13th, 2012 at 5:58 am #25150
Mary May
Username: marymay

PERFECT Explanation Raam! Thank you.

The member didn’t mention seeing the message about email address already in use. I’m almost certain (alright, guessing) that he did not rejoin from a logged in user ID, tried to use the existing email address, ignored the failure and then logged in and found the account lacking privilege.

I’ll go check the account detail logging … and look for an errant unused new user ID. Then, implement the upgrade process you suggested.

THANKS!

Posted: Sunday Aug 5th, 2012 at 7:47 am #21182
Mary May
Username: marymay

Solved!
Plugin conflict with “amr users.” Despite what you say about liking it, it kills the IPN/eMail confirmation processes.

Posted: Friday Aug 3rd, 2012 at 2:48 pm #21131
Mary May
Username: marymay

Cristián: Yes, there was a change about the time IPN quit working. I added a plugin called “Easy Contact Forms,” which really isn’t easy, has a whole bunch of panels, messes with mailing stuff and messes with the users table (I think). The timing and the function overlaps are too good.

I can’t recall any other functional changes at that time. Content additions of course, but no other functions or plugins.

So, I deactivated and deleted Easy Contact Forms this morning. No joy! Still no IPN logging.

I deleted all s2member log files form the server just in case of corruption or permission problems. The api and rtn logs are being written again. No IPN.

Raam: Yes, ran the test tool and got PASSs on every test. I also verified the PayPal to s2Member AR and IPN URLs, the API credentials and the PDT credential. All good.

From the PayPal side, I can see every IPN sent and PayPal reports a “200” http return code for every one.
*** I asked PayPal to resend one of those IPNs. It did … took a while. Got a 200 return code.
Still no IPN log.
Still no confirmation mail!

** IMPORTANT**
While we can actually do without the IPN log, it’s the confirmation / registration emails to subscribers that are the most important consideration. (I’ve always assumed they’re tied to IPN, as Jason mentions in one of the videos. Maybe I’m wrong about that?) Those are actually a LOT more important than the IPN log, and we’re not seeing them. ****And, the subscribers who don’t follow through with the automatic return and registration are not seeing the emails and becoming cranky about not knowing how to “get into the site.”

Thanks for the suggestions so far.
What’s the next idea? Is it safe to reinstall s2 over the top of what we have?

  • This reply was modified 4 years, 5 months ago by  Mary May.
  • This reply was modified 4 years, 5 months ago by  Mary May.
  • This reply was modified 4 years, 5 months ago by  Mary May.
  • This reply was modified 4 years, 5 months ago by  Mary May.
Posted: Wednesday Jul 18th, 2012 at 9:00 am #19628
Mary May
Username: marymay

Thanks Raam!
That’s what I was expecting, and I tested with a test-user and saw no ill effects.

Posted: Wednesday Jul 11th, 2012 at 9:11 am #18916
Mary May
Username: marymay

Hamid,
(Bob Easton, Mary Mays “code monkey”)

When all you see is text “JW Player® appears here” instead of the player itself, that means the player .swf file was not found. Fix that first. Then, go for the content.

I like to make small simple steps. So, simplify your script using real URLs instead of variables. Get each of the pieces properly located. Then, figure out which variables to use / change.

Posted: Monday Jul 9th, 2012 at 7:39 am #18662
Mary May
Username: marymay

Hamid,
(Bob Easton answering for Mary. I’m doing the technical work for her site.)

After learning of this script-based method, we investigated a number of other membership plugins which advertise strong file protection. When asking them technical questions about how they secure files, two basic methods emerged.

For locally stored files (local=same server as the web site) many use the script method, which must have been quite popular a few years ago, the same method that s2Member uses for local files.

The other method uses various forms of authentication tokens (often time limited) and URL obfuscation to authorize content delivery from remote sources such as Content Distribution Networks. s2Member is capable of using this approach with Amazon S3.

So, instead of having our own server resources clogged up with continuously running scripts, we coughed up yet more money and moved the content to Amazon S3.

Posted: Sunday Jul 8th, 2012 at 8:23 am #18610
Mary May
Username: marymay

hmmmmm….

We PAID for support and did not get the support we expected. Now, you want us to GIVE you the answer? Compensate us for about a dozen billable hours and we’ll consider telling you the solution.

BTW, these words are Bob Easton’s, not Mary May’s.

I, Bob Easton, am doing the technical work for Mary’s site. I’m the one who has been waiting days for PAID support to arrive with an answer. I’m the one who spent the long hours to find a way to work around the script that denies access to iPads. If you have concerns about this post, direct them my way, not Mary’s. (if you look around, you can find me at bob-easton.com)

  • This reply was modified 4 years, 6 months ago by  Mary May.
Posted: Saturday Jul 7th, 2012 at 3:13 pm #18571
Mary May
Username: marymay

Knowledge base article was interesting, but did not help with this case.

Passed all tests with the server test tool.

Serving the files through a script is almost as inefficient as having a man stand at a service window and hand out video frames one-by-one.

We have resolved the problem.

Posted: Saturday Jul 7th, 2012 at 3:11 pm #18570
Mary May
Username: marymay

Problem resolved on our own.

Test credentials revoked.

Posted: Thursday Jul 5th, 2012 at 1:58 pm #18402
Mary May
Username: marymay

When might we expect to hear from Jason?

We’re eager to launch a new service and this is the only problem standing in our way.

Posted: Thursday Jul 5th, 2012 at 6:18 am #18367
Mary May
Username: marymay

Yes Cristián, the files are in the s2member-files directory as mentioned in the very first sentence.

We have a dedicated server with more than enough storage and more than enough bandwidth, and NO desire to introduce the added cost of Amazon S3.

What can we change on a dedicated server to improve the situation?

Viewing 25 replies - 1 through 25 (of 26 total)

Old Forums (READ-ONLY): The community now lives at WP Sharks™. If you have an s2Member® Pro question, please use our new Support System.

Contacting s2Member: Please use our Support Center for bug reports, pre-sale questions & technical assistance.